题目描述
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
方法一:冒泡排序思想:从左向右寻找奇数,然后该奇数与前边的偶数进行交换(类似冒泡的过程),直到搜索到数组最后。
class Solution {
public:
void reOrderArray(vector<int> &array) {
int len = array.size();
if (len == 0 || len == 1)
return ;
int lastNegIndex = -1;
for (int i = 0; i < len; i++) {
for (int j = len - 1; j > i; j--) {
if (array[j] % 2 != 0 && array[j-1] % 2 == 0)
swap(array[j], array[j-1]);
}
}
}
};
方法二:插入排序思想:
链接:https://www.nowcoder.com/questionTerminal/beb5aa231adc45b2a5dcc5b62c93f593
来源:牛客网
- 1.要想保证原有次序,则只能顺次移动或相邻交换。
- 2.i从左向右遍历,找到第一个偶数。
- 3.j从i+1开始向后找,直到找到第一个奇数。
- 4.将[i,…,j-1]的元素整体后移一位,最后将找到的奇数放入i位置,然后i++。
- 5.終止條件:j向後遍歷查找失敗。
class Solution {
public:
void reOrderArray(vector<int> &array) {
int len = array.size();
if(len == 0 || len == 1)
return ;
int a = 0;
int b;
while(a < len){
while(a < len && array[a] % 2 != 0)
a++;
b = a + 1;
while(b < len && array[b] % 2 == 0)
b++;
if(b < len){
int temp = array[b];
for(int i = b - 1; i >= a; i--){
array[i + 1] = array[i];
}
array[a] = temp;
} else {
break;
}
}
return ;
}
};