排序总结

来源:互联网 发布:客户无忧软件下载 编辑:程序博客网 时间:2024/05/16 07:40

http://blog.csdn.net/fangpinlei

排序

插入排序

void insert_sort(int a[],int len){    for(int i=0;i<len;++i){        int tmp=a[i],j=i-1;        for(;j>=0 && a[j]>tmp;--j){            a[j+1]=a[j];        }        a[j+1]=tmp;    }}

快速排序

void quick_sort(int a[],int low,int high){    if(low>=high) return;    int i=low,j=high;    int tmp=a[i];    while(i<j){        while(i<j && a[j]>=tmp) --j;        a[i++]=a[j];        while(i<j && a[i]<=tmp) ++i;        a[j--]=a[i];    }    a[i]=tmp;    quick_sort(a,low,i-1);    quick_sort(a,i+1,high);}

堆排序

void adjustHeap(int a[],int s,int e){    int i=s,j=s*2;    while(j<=e){        if(j<=e && a[j]<a[j+1]) ++j;        if(a[j]>a[i]){            swap(a[j],a[i]);            i=j;            j<<=1;        }        else break;    }}void heapSort(int a[],int len){    for(int i=(len-2)/2;i>=0;--i){        adjustHeap(a,i,len-1);    }    for(int i=len-1;i>0;--i){        swap(a[i],a[0]);        adjustHeap(a,0,i-1);    }}

归并排序

void merge(int *a,int *b,int n,int m){    int i=0,j=0;    int *c= (int *)malloc((n+m)*sizeof(int));    for(int k=0;k<n+m;++k){        if(i<n && a[i]<b[j]){            c[k]=a[i++];        }        else if(j<m && a[i]>=b[j]){            c[k]=b[j++];        }    }    memcpy(a,c,(n+m)*sizeof(int));    free(c);}void merge_sort(int *a,int low,int high){    if(low>=high) return;    int m=(low+high)>>1;    merge_sort(a,low,m);    merge_sort(a,m+1,high);    merge(a+low,a+m+1,m-low+1,high-m);}
0 0
原创粉丝点击