剑指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)归并排序

posted @ 2019-07-29 18:08  琴影  阅读(165)  评论(0编辑  收藏  举报