1.O(n)的排序(其实是快速排序的第一步):
把一个数组的排序,前面是奇数,后面是偶数,时间复杂度O(n),空间复杂度O(1)
#include <iostream> #define arraylength 10 using namespace std; int array[arraylength]={1,3,3,3,5,11,15,13,17,15}; void rearrangeArray(int array[],int n)//前面是奇数后面是偶数 { int front=-1; int rear=n; while(front<rear) { while(front<n-1 && array[++front]%2!=0); while(rear>0 && array[--rear]%2==0); swap(array[front],array[rear]); } swap(array[front],array[rear]); for(int i=0;i<n;i++) cout<<array[i]<<" "; } int main() { rearrangeArray(array,arraylength); return 0; }
2.还有一种O(n) 的排序,是在要排列的元素范围很小,比如都是在1--100之间,如人的年龄,,hash【100】,用来存每个数出现的次数,