Question
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变
关键词:数组 排序
Solution
创建新数组
时间复杂度:O(N)
空间复杂度:O(N)
- Python
class Solution:
def reOrderArray(self, array):
odd = []
eve = []
for i in range(len(array)):
if array[i]%2==0:
eve.append(array[i])
else:
odd.append(array[i])
return odd + eve
- C++
class Solution {
public:
void reOrderArray(vector<int> &array) {
vector<int> new_arr;
for(int i = 0; i < array.size(); i++){
if (array[i] % 2 == 1)
new_arr.push_back(array[i]);
}
for(int i = 0; i < array.size(); i++){
if (array[i] % 2 == 0)
new_arr.push_back(array[i]);
}
array = new_arr;
}
};
原数组排序
要保证奇数偶数原来的相对位置不变,可以采用插入排序,冒泡排序,归并排序。
插入排序:
时间复杂度:O(N^2)
空间复杂度:O(1)
归并排序:
时间复杂度:O(Nlog(N))
空间复杂度:O(1) 需要临时数组
- Python
## 插入排序,如果是奇数就插到前面最后一个偶数之前,如果是偶数则继续向下一个看
class Solution:
def reOrderArray(self, array):
for i in range(1,len(array)):
if array[i] % 2 == 1:
j = i
cur = array[i]
while j>0 and array[j-1]%2==0:
array[j] = array[j-1]
j -= 1
array[j] = cur
return array
- C++
class Solution {
public:
void reOrderArray(vector<int> &array) {
for(int i = 1; i < array.size(); i++){
if (array[i] % 2 == 1){
int j = i;
int cur = array[i];
while((j > 0) && (array[j-1] % 2 == 0)){
array[j] = array[j-1];
j--;
}
array[j] = cur;
}
}
}
};