题目描述:对一个整数数组进行奇偶数排序。排序的规则是奇数在前,偶数在后。(按照奇偶数分成两部分后,分别按从小到大顺序排序。)
eg 1:
输入:1 2 3 4 5 6
输出:1 3 5 2 4 6
eg 2:
输入:8 5 3 6 13 3 10 4 6 9 4 13
输出:3 3 5 9 13 13 4 4 6 6 8 10
方法:利用双指针与插入排序,一次遍历完成。
int* ansSort(int* nums,int numsSize){//双指针+插入排序
int startOdd=0,startEven=numsSize-1;//指向奇偶数空位
int* ans=(int*)malloc(sizeof(int)*numsSize);
memset(ans, 0, sizeof(int) * numsSize); //初始化数组
for(int i=0;i<numsSize;i++){
if(nums[i]%2!=0){
int j=startOdd-1;
while(j>=0&&ans[j]>nums[i]) j--;//找到插入位置
for(int k=startOdd-1;k>=j+1;k--) ans[k+1]=ans[k];//循环右移
ans[j+1]=nums[i];
startOdd++;
}else{
int j=numsSize-1;
while(j>=startEven+1&&ans[j]>nums[i]) j--;
for(int k=startEven;k<j;k++) ans[k]=ans[k+1]; //循环左移
ans[j]=nums[i];
startEven--;
}
}
return ans;
}