逆龙七步

导航

排序小结(C++版)

一、快速排序

#include <iostream>
using namespace std;

int adjust(int a[],int start,int end)
{
    int i,j;
    i=start;
    j=end;
    int temp=a[i];
    while(i<j)
    {
        while(i<j&&temp<a[j])
            j--;
        if(i<j)
            a[i++]=a[j];
        while(i<j&&temp>=a[i])
            i++;
        if(i<j)
            a[j--]=a[i];
    }
    a[i]=temp;
    return i;
}

void quicksort(int a[],int start,int end)
{
    if(start<end)
    {
        int m=adjust(a,start,end);
        quicksort(a,start,m-1);
        quicksort(a,m+1,end);
    }    
}

void print(int a[],int n)
{    
    for(int i=0;i<n;i++)
        cout<<a[i]<<" ";
    cout<<endl;
}

void main()
{
    int a[]={5,9,3,7,1,8};
    quicksort(a,0,5);
    print(a,6);
    cout<<"hello world\n";
    system("pause");
}

 二、堆排序

#include <iostream>
using namespace std;

//s表示根节点(仅s节点不满足堆)
//n表示所有节点的个数
//a[0]不参与排序
void adjust(int a[],int s,int n)
{
    int j;
    int temp=a[s];
    for(j=2*s;j<=n;j=2*j)
    {
        if(j<n&&a[j]<a[j+1])
            j++;
        if(temp>a[j])
            break;
        a[s]=a[j];
        s=j;
    }
    a[s]=temp;
}

void heapsort(int a[],int n)
{
    int i;
    for(i=n/2;i>=1;i--)
        adjust(a,i,n);
    for(i=n;i>1;i--)
    {
        swap(a[1],a[i]);
        adjust(a,1,i-1);
    }
}

void print(int a[],int n)
{    
    for(int i=0;i<n;i++)
        cout<<a[i]<<" ";
    cout<<endl;
}

void main()
{
    int a[]={-999,5,9,3,7,1,8};
    heapsort(a,6);
    print(a,7);    
    system("pause");
}

 

posted on 2014-04-04 10:18  逆龙七步  阅读(250)  评论(0编辑  收藏  举报