奇偶排序问题
经典的算法面试题目,有一个数组,1,2,3,4,5,6,7,8,9,10,将所有的偶数放在数组后面,奇数放在数组前面。
思路如下:
第一:按照快速排序的思想,同时从前到后,从后到前进行迭代。
第二:如果前面是偶数,后面是奇数,则交换。
第三:如果迭代位置相遇,则退出循环。
代码如下:
1 #include <iostream> 2 3 using namespace std; 4 5 bool isOdd(int p); 6 void change(int *a,int p1,int p2); 7 8 int main() 9 { 10 cout << "Hello world!" << endl; 11 int a[] = {1,2,3,4,5,6,7,8,9,10}; 12 int len = sizeof(a)/sizeof(int); 13 int i=0,j=len-1; 14 while(true) 15 { 16 if(isOdd(a[i])) 17 { 18 ++i; 19 continue; 20 } 21 if(!isOdd(a[j])) 22 { 23 --j; 24 continue; 25 } 26 if(i>j)break; 27 change(a,i,j); 28 } 29 for(int k=0;k<len;k++) 30 { 31 cout << a[k] << endl; 32 } 33 return 0; 34 } 35 36 bool isOdd(int p) 37 { 38 return !(p%2 == 0); 39 } 40 void change(int *a,int p1,int p2) 41 { 42 int temp = a[p1]; 43 a[p1] = a[p2]; 44 a[p2] = temp; 45 }