zoukankan      html  css  js  c++  java
  • 小根堆实现的堆排序

    输入:     第一行输入一个整数N,代表要排序元素的个数

               以下N行输入N个要排序的元素

    输出:    从小到大依次输出各元素

    #include<iostream>
    using namespace std ;
    int a[100] ;
    void heap(int s, int n){            //调整堆,使其始终为小根堆
        int i, j = 1, k = a[s], max = 0 ;
        while(j!=max){
            i = a[s] ;
            j = max ;
            if(2*s<=n)
                if(a[s*2]<i){
                    i = a[s*2] ;
                    j = s * 2 ;
                }
            if(s*2+1<=n)
                if(a[s*2+1]<i){
                    i = a[s*2+1] ;
                    j = s*2+1 ;
                }
            if(j!=max){
                a[s] = i ;
                s = j ;
            }
            a[s] = k ;
        }
    }
    int main(){
        int n, i ;
        cin >> n ;
        for(i=1; i<=n; i++)
            cin >> a[i] ;
        for(i=n/2; i>0; i--)        //构建小根堆
            heap(i, n) ;
        for(i=n; i>1; i--){
            cout << a[1] << " " ;
            a[1] = a[i] ;
            n -- ;
            heap(1, n) ;            //调整当前堆
        }
        cout << a[1] << " " ;       //输出最大堆元素
        return 0 ;
    }

  • 相关阅读:
    Linux文件与目录管理(一)
    Linux文件基本属性
    软工实践总结
    微软必应词典的调查与研究
    调研安卓开发环境的发展演变
    软件工程的预定目标
    学习进度第5周
    机械学习----KNN算法
    MyBatis:简介、第一个程序01(纯小白非常实用)
    解决数据库连接时区的问题
  • 原文地址:https://www.cnblogs.com/xiaolongchase/p/2143134.html
Copyright © 2011-2022 走看看