调整数组顺序-奇数在左偶数在右:
法一:模式匹配:归并排序:
奇数放左边,偶数放右边。需另外开辟空间。
#include<iostream>
using namespace std;
void mergeSortOddEven(int arr[],int low, int high){
int length=high-low+1;
int ref[length];
int left=low;
int right=high;
int current=low;
//Copy到ref数组
for(int i=0;i<length;i++){
ref[i]=arr[i];
}
while(current<length){
if(ref[current]%2==0){
arr[right--]=ref[current++];
}
if((ref[current]%2)!=0){
arr[left++]=ref[current++];
}
}
}
int main(){
int arr[]={2,4,6,1,7,2,8,3,7,3,6};
mergeSortOddEven(arr,0,10);
for(int i=0;i<11;i++){
cout<<arr[i]<<" ";
}
return 0;
}
结果:
法二:模式匹配:快速排序:
左右两指针,不满足则交换元素。
#include<iostream>
using namespace std;
void quickSortOddEven(int arr[],int low, int high){
int length=high-low+1;
int left=low;
int right=high;
while(left<right){
while(arr[left]%2==1){
left++;
}
while(arr[right]%2==0){
right--;
}
if(left<right){
swap(arr[left],arr[right]);
}
}
}
int main(){
int arr[]={2,4,6,1,7,2,8,3,7,3,6};
quickSortOddEven(arr,0,10);
for(int i=0;i<11;i++){
cout<<arr[i]<<" ";
}
return 0;
}
结果: