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

 

 

posted @ 2012-12-04 21:47  曙光_用代码记录人生  阅读(394)  评论(0编辑  收藏  举报