面试100 29调整数列中的数使奇数位于偶数之前
一问题描述:
调整顺序使奇数位于偶数之前
(1) 使用两个指针low ,high分别指向数列的首和尾,然后向中间移动
(2) 当low发现指向的元素不是奇数时停止移动
(3) 当high发现指向的元素不是偶数时停止移动
(4)交换两个指针所指向的元素。
(5)当low < high 时循环执行
整个思路有点类似归并排序,两个有序序列调整顺序的过程。
二 代码如下:
#include <iostream>
using namespace std ;
void judge(int * a , int low , int high)

{
if(!a)
return ;
while(low < high)

{
while(low < high && (a[low]& 1) ==1) low++ ;
while(low < high && (a[high] & 1) ==0) high-- ;
if(low < high)
swap(a[low] , a[high]) ;
}
}
int main()

{

int a[]=
{4 , 7, 4 ,3 ,6 ,1 ,5} ;
judge(a , 0 , 6) ;
for(int i = 0 ; i < 7 ;i++)
cout<<a[i]<<" " ;
system("pause") ;
return 0 ;
}