首页 > 代码库 > 各种常见排序实现代码

各种常见排序实现代码

主要包括冒泡、简单选择、插入、堆排、归并、快排这几种。以后会慢慢补充。

可能有错,欢迎指出。

#include<iostream>#include<cstdio>using namespace std;//升序int arr[10000],length;//冒泡排序void Bubble_Sort(int *Arr,int length){    bool update;    while(1)    {        update=false;        for(int i=0; i<length-1; ++i)            if(Arr[i]>Arr[i+1])            {                int temp=Arr[i];                Arr[i]=Arr[i+1];                Arr[i+1]=temp;                update=true;            }        if(!update) break;    }}//简单选择排序void SimpleEelect_Sort(int *Arr,int length){    for(int i=0; i<length; ++i)    {        int minn=i;        for(int j=i+1; j<length; ++j)            if(Arr[j]<Arr[minn])                minn=j;        if(minn!=i)        {            int temp=Arr[i];            Arr[i]=Arr[minn];            Arr[minn]=temp;        }    }}//直接插入排序void Insert_Sort(int *Arr,int length){    for(int i=1; i<length; ++i)    {        int key=Arr[i];        int j;        for(j=i-1; j>=0; --j)        {            if(Arr[j]<=key)  break;            else Arr[j+1]=Arr[j];        }        Arr[j+1]=key;    }}//堆排void HeapAdjust(int *Arr,int rt,int length){    int largest=rt;    int key=Arr[rt];    while(1)    {        int lc=rt*2+1,rc=rt*2+2;        if(lc<length&&Arr[lc]>Arr[largest]) largest=lc;        if(rc<length&&Arr[rc]>Arr[largest]) largest=rc;        if(largest==rt)  break;        Arr[rt]=Arr[largest];        Arr[largest]=key;        rt=largest;    }}void HeapBuild(int *Arr,int length){    for(int i=(length-1)/2; i>=0; --i)        HeapAdjust(Arr,i,length);}void Heap_Sort(int *Arr,int length){    HeapBuild(Arr,length);    for(int i=length-1; i>=1; --i)    {        int temp=Arr[i];        Arr[i]=Arr[0];        Arr[0]=temp;        HeapAdjust(Arr,0,i);    }}//归并排序int A[10000];void Merge_Sort(int *Arr,int L,int R){    if(L<R)    {        int M=(L+R)/2;        Merge_Sort(Arr,L,M);        Merge_Sort(Arr,M+1,R);        int p=L,q=M+1,i=L;        while(p<=M||q<=R)        {            if(q>R||(p<=M&&Arr[p]<=Arr[q])) A[i++]=Arr[p++];            else A[i++]=Arr[q++];        }        for(int j=L; j<=R; ++j)            Arr[j]=A[j];    }}//快速排序int partition(int *Arr,int L,int R){    int key=Arr[R];    int i=L-1;    for(int j=L; j<=R; ++j)        if(Arr[j]<=key)        {            i++;            int temp=Arr[j];            Arr[j]=Arr[i];            Arr[i]=temp;        }    return i;}void Quick_Sort(int *Arr,int L,int R){    if(L<R)    {        int mid=partition(Arr,L,R);        Quick_Sort(Arr,L,mid-1);        Quick_Sort(Arr,mid+1,R);    }}void read(){    scanf("%d",&length);    for(int i=0; i<length; ++i)        scanf("%d",&arr[i]);}void output(){    for(int i=0; i<length; ++i)        printf("%d ",arr[i]);    printf("\n");}int main(){    read();    Quick_Sort(arr,0,length-1);    output();    return 0;}