输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。

首先,可以想到,用前后两个指针一个在数组首一个在数组尾同时往数组中间遍历,当遇到前指针遇到偶数后指针遇到奇数时,就将两个数交换,直到两指针相遇或者前指针超过了后指针,这个有点类似快速排序的思想;

程序设计如下:

#include<iostream>#include<assert.h>usingnamespacestd;voidAdjustArr(int*parr,size_tsize)//调整数组{assert(parr&&size);int*start=parr;int*end=parr+size-1;while(start<end){while((start<end)&&((*start%2)!=0))//当start指针遇到偶数停止++start;while((start<end)&&((*end%2)==0))//当end指针遇到奇数停止--end;if(start<end)//判断start和end位置{swap(*start,*end);++start;--end;}elsereturn;}}voidPrintArr(int*parr,size_tsize)//打印数组{assert(parr&&size);for(size_ti=0;i<size;++i){cout<<parr[i]<<"";}cout<<endl;}intmain(){intarr[]={1,5,2,4,6,11,3,8,0,7};size_tsize=sizeof(arr)/sizeof(arr[0]);PrintArr(arr,size);AdjustArr(arr,size);PrintArr(arr,size);return0;}


运行程序,结果:



《完》