排序汇总

来源:互联网 发布:sopcast ubuntu 编辑:程序博客网 时间:2024/06/03 16:47

今天将之前学习的各种排序方法回顾重写了一遍,感觉还是代码写的太少了,要时刻提醒自己大神还是要代码敲出来的,将今天写的代码留在这吧,感觉过段时间会生疏,还要在来看看然后再敲几遍,简单的就没有注释了,针对自己开始疑惑的地方有注释,欢迎大家指点,直接上代码吧。

int HalfInsert(int *p,int b,int e,int data)//折半插入{    if(b>e)        return -1;    int m=b+(e-b)/2;    int te=e;    while(b<=te)    {        if(data<p[m])            te=m-1;        else if(data>p[m])            b=m+1;        else         {            b=m;            break;        }        m=b+(te-b)/2;    }    //b就是要插入的位置    for(int i=e;i>=b;--i)    {        p[i+1]=p[i];    }    p[b]=data;    return b;}void InsertionSort(int *p,int len)//插入排序,调用折半插入{    //从数组第二个数据开始做插入排序,第一个数据单独的不用排序    for(int i=1;i<len;++i)    {        HalfInsert(p,0,i-1,p[i]);    }    //p[1] 是在p[0]p[0]间做插入    //p[2] 是在p[0]p[1]间做插入}void QuickSort(int *p,int b,int e)//快排{    if(b>e)        return;    int key=b;    for(int i=b+1;i<=e;++i)    {        if(p[i]<p[b])        {            ++key;            if(key!=i)//排除相对于p[b]的第一个数与p[b]交换的情况            {                int t = p[i];                p[i] = p[key];                p[key] = t;             }        }    }    if(key!=b)    {        int t = p[b];        p[b] = p[key];        p[key] = t;    }    QuickSort(p,b,key-1);    QuickSort(p,key+1,e);}void MergeSort(int *p,int b,int e,int*help)//归并排序{    if(b>=e)        return;    int m=b+(e-b)/2;//数组划分点    int index_L=b;//左部分起点    int index_R=m+1;//右部分起点    int index_help=b;//帮助数组起点    MergeSort(p,index_L,m,help);    MergeSort(p,index_R,e,help);    while(index_L<=m&&index_R<=e)    {        if(p[index_L]<p[index_R])            help[index_help++]=p[index_L++];        else            help[index_help++]=p[index_R++];    }    if(index_L>m)    {        while(index_R<=e)        {            help[index_help++]=p[index_R++];        }    }    else    {        while(index_L<=m)        {            help[index_help++]=p[index_L++];        }    }    for(int i=b;i<=e;++i)    {        p[i]=help[i];    }}void SeleteSort(int *p,int len)//选择排序{    for(int i=0;i<len-1;++i)    {        int k=i;        for(int j=i+1;j<len;++j)        {            if(p[k]<p[j])                k=j;        }        if(k!=i)        {            int temp=p[k];            p[k]=p[i];            p[i]=temp;        }    }}void BubbleSort(int *p,int len)//冒泡排序{    for(int i=0;i<len-1;++i)    {        for(int j=0;j<len-i-1;++j)        {            if(p[j]>p[j+1])            {                int temp=p[j];                p[j]=p[j+1];                p[j+1]=temp;            }        }    }}
1 0
原创粉丝点击