• 堆排序


    堆排序

    #include <iostream>
    #include <algorithm>
    using namespace std;
    
    
    void max_heapify(int arr[], int start, int end) {
        int dad = start; int son = dad * 2 + 1;
    
        while ( son <= end ){
            if (son + 1 <= end && arr[son] < arr[son+1]){
                son++;
            }
            if (arr[dad] > arr[son]){
                return;
            } else {
                swap(arr[dad], arr[son]);
                dad = son; 
                son = dad * 2 + 1;
            }
        }
    }
    
    void heap_sort(int arr[], int length){
        for(int i = length / 2 - 1; i >= 0; i--){
            max_heapify(arr, i, length-1);  // 这样的话是大堆顶
        }
        for(int i = length - 1; i >= 0; i--){
            swap(arr[0], arr[i]);
            max_heapify(arr,0,i-1);
        }
    
    }
    
    int main(){
        int arr[] = { 4,6,1,32,56,7,2,3,5,3};
        int length  = sizeof(arr) / sizeof(*arr);
        heap_sort(arr, length);
        for(int i = 0; i < length; i++){
            cout << arr[i]  << "   ";
        }
        system("pause");
        return 0;
    }
    

    堆排序时间复杂度分析

    堆排序是一种选择排序,整体主要由构建初始堆+交换堆顶元素末尾元素并重建堆两部分组成。其中构建初始堆经推导复杂度为O(n),在交换并重建堆的过程中,需交换n-1次,而重建堆的过程中,根据完全二叉树的性质,[log2(n-1),log2(n-2)...1]逐步递减,近似为nlogn。所以堆排序时间复杂度一般认为就是O(nlogn)级。

  • 相关阅读:
    LAMP的搭建
    Apache安装之后,在浏览器输入ip无法访问
    DNS无法区域传送(axfr,ixfr)
    you do not permission to access / no this server
    http虚拟主机的简单配置训练
    搭建一个简单的dns缓存服务器
    Django——User-Profile
    Django——信号
    Django——中间件
    Django——日志
  • 原文地址:https://www.cnblogs.com/wsl-hitsz/p/14526738.html
Copyright © 2020-2023  润新知