一个数组有2n个元素,其中有n个奇数,n个偶数,数组无序,写一个算法使得奇数位置放置奇数,偶数位置放置偶数。例如
int array[20]={1,2,1,2,1,1,1,2,2,2,2,1,1,2,2,2,2,2,2,2};
最终结果
a={1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2};
问题分析:遍历一次整个数组,先判断是奇数位还是偶数为,并检查数组中的元素(奇数或偶数)和奇偶位置是否对应(奇数位对应奇数,偶数为对应偶数);如果奇数位置中存放的元素不是奇数,需要调整;这时候我们需要从当前下标的下一个去遍历后面的数组元素找到第一奇数(在遍历过程中会有奇数位存放的奇数的情况, 我们直接不动已经符合题目要求的元素,继续往后遍历),然后进行替换;具体代码实现如下:
void sort(int * array ,int length){
for(int i = 0 ;i < length ; i++){
int j = i+1;
if((i & 0x01) == 0){//奇数位置
if((array[i] & 0x01 )== 0){//不是奇数
while(j < length){
// 奇数位置放置的是奇数,继续往后遍历