剑指offer 调整数组顺序使奇数位于偶数前面
题目描述
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
思路:
1)空间换时间, 空间复杂度O(n), 时间复杂度O(n)
1 class Solution { 2 public: 3 void reOrderArray(vector<int> &array) { 4 int len = array.size(); 5 vector<int> v1, v2; 6 v1.clear(); 7 v2.clear(); 8 for (int i = 0; i < len; i++) { 9 if (array[i] & 1 != 0) { 10 v1.push_back(array[i]); 11 } else { 12 v2.push_back(array[i]); 13 } 14 } 15 int index = 0; 16 for (int i = 0; i < v1.size(); i++) { 17 array[index++] = v1[i]; 18 } 19 for (int i = 0; i < v2.size(); i++) { 20 array[index++] = v2[i]; 21 } 22 } 23 };
2)插入排序,时间复杂度O(n^2), 空间复杂度O(n)
1 class Solution { 2 public: 3 void reOrderArray(vector<int> &array) { 4 int k = 0; 5 int len = array.size(); 6 for (int i = 0; i < len; i++) { 7 if (array[i] & 1 != 0) { 8 int temp = array[i]; 9 int j = i; 10 while (j > k) { 11 array[j] = array[j - 1]; 12 j--; 13 } 14 array[k++] = temp; 15 } 16 } 17 } 18 };
3)归并排序
越努力,越幸运