zoukankan      html  css  js  c++  java
  • 深入浅出理解排序算法之-堆排序

    #include <iostream>



    void Swap(int &a,int &b){

        int temp;

        temp = a;

        a = b;

        b = temp;

    }


    // 维护最小堆

    void AdjustMinHeap(int *a,int pos,int len){

        int temp,child;

        

        for (temp = a[pos];2*pos +1 <= len; pos = child) {       //不断下移父结点,直到结束

            // 左孩子(由于第一个结点是从0開始的)

            child = 2*pos +1;

            if (child < len && a[child] > a[child +1])// 选取左右孩子中的最小值,a[pos]temp父亲,a[child]左孩子。a[child+1]右孩子

                child++;

            if (temp > a[child]) {     //假设父结点>最小值,将将父节点赋予最小值

                a[pos] = a[child];

            } else {

                break;

            }

        }

        a[pos] = temp;

    }


    /* 堆排序

     

     基本思想:对于n个元素的序列进行堆排序,先将其建成堆(最小堆:上一层的比本层小,一次递推)。以根结点与第n个结点交换,调整前n1个结点成为堆。再以根节点与第n-1个结点进行交换。反复上述操作。直到整个序列有序。

     特点:时间复杂度:O(nlogn)

     */

    void MyMinHeapSort(int *array,int len){

        int i;

        for (i = len/2-1; i >=0;i--)           //先初建堆

            AdjustMinHeap(array, i, len -1);

        

        for (i = len -1; i >=0; i--) {

            Swap(array[i],array[0]);           //取出堆顶元素(也就是最小元素array[0],放到数组第i)

            AdjustMinHeap(array,0, i-1);      //然后对前i-1位数组重建堆(重建后堆顶为最小元素)

            

        }

    }


    int main(int argc,constchar * argv[])

    {

        int i;

        int array[] = {0,13,1,14,27,18};

        int length =sizeof(array)/sizeof(array[0]);

        

        // 堆排序

        MyMinHeapSort(array, length);

        

        for (i =0; i < length; i++){

            printf("%d ",array[i]);

        }

        printf(" ");

        

        

        return0;

    }


  • 相关阅读:
    PHPCMS的自增长标签
    discuz!X2头像无法显示解决方法
    屏蔽“您目前使用的Discuz!程序有新版本发布,请及时升级!”提示
    python +Django 搭建web开发环境初步,显示当前时间
    Java之美[从菜鸟到高手演变]之设计模式四
    Java之美[从菜鸟到高手演变]之设计模式三
    Java之美[从菜鸟到高手演变]之设计模式二
    Java开发中的23种设计模式详解
    Cglib动态代理
    JSP 对象的作用范围
  • 原文地址:https://www.cnblogs.com/cynchanpin/p/6758970.html
Copyright © 2011-2022 走看看