首页 > 其他 > 详细

排序

时间:2014-02-08 16:02:53      阅读:322      评论:0      收藏:0      [点我收藏+]

 冒泡排序:稳定,时间复杂度O(n2),空间复杂度O(1)

bubuko.com,布布扣
//bubble
void bubblesort(int *a, int n)
{
    int hig=n-1;
    int i;

    while(hig)
    {
        for(i=0;i<=hig-1;i++)
        {
            if(a[i]>a[i+1]) swap(&a[i],&a[i+1]);
        }
        hig--;
    }
}
bubuko.com,布布扣

鸡尾酒排序:稳定,时间复杂度O(n2),空间复杂度O(1)。冒泡排序的变形。

bubuko.com,布布扣
//cocktail
void cocktailsort(int *a ,int n)
{
    int low=0,hig=n-1;
    int i;

    while(low<hig)
    {

        for(i=low;i<=hig-1;i++)
        {
            if(a[i]>a[i+1]) swap(&a[i],&a[i+1]);
        }

        hig--;

        for(i=hig;i>=low+1;i--)
        {
            if(a[i]<a[i-1]) swap(&a[i],&a[i-1]);
        }

        low++;
    }

}
bubuko.com,布布扣

插入排序:稳定,时间复杂度O(n2),空间复杂度O(1)

bubuko.com,布布扣
//insert
void insertsort(int *a, int n)
{
    int i,j;

    for(i=1;i<n;i++)
    {
        j=i;
        while(j>=1&&a[j]<a[j-1])
        {
            swap(&a[j],&a[j-1]);
            j--;
        }
    }
}
bubuko.com,布布扣

快速排序:不稳定,时间复杂度平均O(nlogn),最坏O(n2),空间复杂度O(logn)。

三种实现:前两种两个指针一前一后,后一种指针都在前。第二种不使用交换。

bubuko.com,布布扣
//qsort  
void quicksort1(int *a, int low, int hig)
{
    int key=a[low];

    int i=low, j=hig;

    while(i<j)
    {
        while(i<j)
        {
            if(a[j]<key)
            {
                swap(&a[i],&a[j]);
                i++;
                break;
            }
            else j--;
        }

        while(i<j)
        {
            if(a[i]>key)
            {
                swap(&a[i],&a[j]);
                j--;
                break;
            }

            else i++;
        }
    }

    if(i-1>=low) quicksort1(a,low,i-1);
    if(i+1<=hig) quicksort1(a,i+1,hig);
}

void quicksort2(int *a, int low, int hig)
{
    int key=a[low];

    int i=low, j=hig;

    while(i<j)
    {
        while(i<j&&a[j]>=key) j--;

        if(i<j) a[i++]=a[j];

        while(i<j&&a[i]<=key) i++;

        if(i<j) a[j--]=a[i];
    }

    a[i]=key;

    if(i-1>=low) quicksort2(a,low,i-1);
    if(i+1<=hig) quicksort2(a,i+1,hig);
}

void quicksort3(int *a, int low, int hig)
{
    int key=a[hig];

    int i=low-1, j=low;

    while(j<hig)
    {
        if(a[j]<a[hig])
        {
            i++;
            swap(&a[i],&a[j]);
            j++;
        }
        else j++;
    }

    swap(&a[++i],&a[hig]);

    if(i-1>=low) quicksort3(a,low,i-1);
    if(i+1<=hig) quicksort3(a,i+1,hig);
}
bubuko.com,布布扣

 

排序

原文:http://www.cnblogs.com/mr-redrum/p/3494511.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!