//所有偶数位于数组的后半部分。要求时间复杂度为O(n)。
思路:
看到这道题目的时候,我第一个想到的就是快速排序中的第一步,就是要用一个哨兵把数组分成两部分,因为那个算法的时间复杂度就是O(n)的,并且最后的结果也是将数组分成了两部分,只是分解的条件不同罢了。所以只要想到这一点就比较简单了。
贴上代码:
//54.调整数组顺序使奇数位于偶数前面(数组)。 // //题目:输入一个整数数组,调整数组中数字的顺序,使得所有奇数位于数组的前半部分, //所有偶数位于数组的后半部分。要求时间复杂度为O(n)。 #include <iostream> using namespace std; int partition(int *index,int begin,int end){ int i = begin; int j = end; int temp; while(i<j){ while((i<j)&&!(index[j] & 0x1)){ --j; } if(i<j){ temp = index[i]; index[i] = index[j]; index[j] = temp; } while((i<j)&&(index[i] & 0x1)){ ++i; } if(i<j){ temp = index[i]; index[i] = index[j]; index[j] = temp; } } return i; } int main(){ int index[] = {2,3,5,6,23,4,2,1,5,6}; int length = sizeof(index)/sizeof(int); partition(index,0,length-1); for(int i = 0 ; i < length ; ++i){ cout << index[i] << " "; } cout << endl; system("pause"); return 1; }