调整数组顺序使奇数位于偶数前面

调整后奇数相对位置不变,偶数相对位置不变。可以先找到第一个偶数所在位置和最后一个奇数所在位置,然后把偶数一次次向后移动,空出来的第一个位置用来填充最近的一个奇数,直到把最后一个奇数填充到空出来的位置为止。

 1 class Solution {
 2 public:
 3     void reOrderArray(vector<int> &array) {
 4         if(array.size()<=1)
 5             return;
 6         int len=array.size();
 7         int oddi=-1;
 8         int eveni=-1;
 9         for(int i=0;i<len;i++)
10         {
11             if(eveni==-1&&array[i]%2==0)
12             {
13                 eveni=i;
14                 break;
15             }
16         }
17         for(int i=len-1;i>=0;i--)
18         {
19             if(oddi==-1&&array[i]%2==1)
20             {
21                 oddi=i;
22                 break;
23             }
24         }
25         while(eveni<oddi)
26         {
27             int index;
28             int tmp1=array[eveni];
29             int tmp2;
30             for(index=eveni+1;index<=oddi;index++)
31             {
32                 if(array[index]%2==0)
33                 {
34                     tmp2=array[index];
35                     array[index]=tmp1;
36                     tmp1=tmp2;
37                 }
38                 else
39                 {
40                     tmp2=array[index];
41                     array[index]=tmp1;
42                     array[eveni]=tmp2;
43                     break;
44                 }
45             }
46             if(index==oddi)
47                 break;
48             eveni++;
49         }    
50         return;
51     }
52 };
View Code

如果不需要保持相对位置不变,那就简单了,可以在O(n)时间完成移动。

posted @ 2016-03-29 22:21  vaevaevae  阅读(160)  评论(0编辑  收藏  举报