zoukankan      html  css  js  c++  java
  • 数据结构-堆排序

    #include <iostream>
    
    using namespace std;
    
    void Sort(int* a,int num,int n){
        int c = 2 * num + 1;
    
        while(c+1 < n){
            if(a[c+1] > a[c]){
                c++;
            }
            if(a[c] > a[num]){
                int tmp = a[c];
                a[c] = a[num];
                a[num] = tmp;
                num = c;
                c = 2 * num + 1;
            }
            else{
                break;
            }
        }
        if(c+1 == n){
            if(a[c]>a[num]){
                int tmp = a[c];
                a[c] = a[num];
                a[num] = tmp;
            }
        }
    }
    
    void CreateHeap(int* a,int n){
        int t = (n-1) / 2;       //最后一个非叶子点
        for(int i=t;i>=0;i--){
            Sort(a,i,n);
        }
    }
    
    void HeapSort(int* a,int n){
        for(int i=n-1;i>=0;i--){
            int tmp = a[i];
            a[i] = a[0];
            a[0] = tmp;
            Sort(a,0,i);    //因为把0和最后的元素交换,所以每次都只需要从0开始构建heap
        }
    
    }
    
    int main()
    {
        int a[] = {5,2,8,7,4,1,6,9,3,10};
        int n = 10;
    
        CreateHeap(a,n);
        HeapSort(a,n);
    
        for(int i=0;i<n;i++){
            cout << a[i] << " ";
        }
    
        return 0;
    }
  • 相关阅读:
    文件操作
    MFC
    MFC
    MFC
    MFC
    大陆居民身份证验证方法(java)
    java validator的原理与使用
    解析搜狗词库(python)
    ICTCLAS改进的java版分词软件
    mvn打包
  • 原文地址:https://www.cnblogs.com/wn19910213/p/3691891.html
Copyright © 2011-2022 走看看