奇偶排序问题

经典的算法面试题目,有一个数组,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 }

 

posted on 2017-08-16 11:07  ^~~^  阅读(139)  评论(0编辑  收藏  举报

导航