zoukankan      html  css  js  c++  java
  • [原创]堆排序(C++版)

    堆排序  时间复杂度:ON*log2N)空间复杂度:O1不稳定的

    下面的方式我是通过向下调整创建大根堆,然后通过向下调整进行堆排序。

    //向下调整堆
    void adjustDown(int A[], int k, int len){
        int tmp = A[k];
        for (int i = 2 * k + 1; i < len; i = 2 * i + 1){
            if (i<len - 1 && A[i] < A[i + 1])
                i++;
            if (tmp >= A[i])  break;
            if (A[i] > tmp){
                A[k] = A[i];
                k = i;
            }
        }
        A[k] = tmp;
    }
    //初始化,建立大根堆
    void buildMaxHead(int A[], int len){
        int i;
        for (i = len / 2-1; i >=0; i--)
            adjustDown(A,i,len);    
    }
    //以向下调整的方式进行堆排序
    void heapSort(int A[], int len){
        buildMaxHead(A,len);    
        for (int i = len - 1; i > 0; i--){
            swap(A[i],A[0]);
            adjustDown(A,0,i);
        }
    }

    另外还可以通过向上调整,以及创建小根堆的方式来进行堆排序,下面我只列出向上调整的方法函数,至于如何通过向上调整以及创建小根堆来实现堆排序,后面有机会再补充完善在该博文中:

    //向上调整
    void adjustUp(int A[], int k){
        int tmp = A[k];
        int i = k / 2;
        while (i >= 0 && tmp > A[i]){
            A[k] = A[i];
            k = i;
            i = i / 2;
        }
        A[k] = tmp;
    }

    欢迎网友在评论中给出不同意见和看法!

  • 相关阅读:
    day35
    Audio Unit 基础
    Audio Unit 介绍
    音频PCM编码
    iOS libyuv
    FFmpeg AVPacket
    FFmpeg AVCodec
    FFmpeg编译iOS静态库
    iOS-Cocoapods更新不及时
    iOS-读取txt文件中文乱码
  • 原文地址:https://www.cnblogs.com/lordcheng/p/7326712.html
Copyright © 2011-2022 走看看