选择,堆排序,基数排序

2021-11-01  本文已影响0人  喜忧参半

选择排序

排序原理

设一个预留空间,存放每次选择的最小元素的下标。
开始循环:

void selectsort(int a[ ],int n)
{
    int i,j,k;
    for(i=1,i<=n;i++)
    {
        k=i;
        for(j=i+1;j<=n;j++)
            if(a[j]<a[k]) k=j;
        if(k!=i)
        {
            a[0]=a[k];
            a[k]=a[j];
            a[j]=a[0];
        }
    }
}

堆排序

排序原理

第一步:先建立heapify函数。
设置根结点i为max,设置左孩子为2*i+1,设置右孩子为2*i+2。

第二步:进行堆排序
从根结点i开始,循环建堆。
从最后一个叶子结点开始,交换叶子结点与根结点的值,递归执行heapify堆化函数。

void heapify(int a[],int n,int i)
{
    int max=i;
    int Lson=2*i+1;
    int Rson=2*i+2;
    if(Lson <n && Lson > max)
        max=Lson;
    if(Rson <n && Rson >max)
        max=Rson;
    if(max!=i)
    {
        swap(&a[max],&a[i]);
    }
    heapify(a,n,i);
}
void heapsort(int a[],int n)
{
    int i;
    for(i=n/2-1;i>=0;i--) 
    //从根开始,对每一个存在的子堆进行堆化
        heapify(a,n,i);
    for(i=n-1;i>=0;i++)
    {
        swap(&a[0],&a[i]);
        heapify(a,n,i);
    }
}

基数排序

排序原理
上一篇 下一篇

猜你喜欢

热点阅读