排序O(n)
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】,用来存每个数出现的次数,

浙公网安备 33010602011771号