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 of函数实例
    Linux libenv 编译移植
    OpenTracing简单了解
    Byte Buddy简单学习
    JavaAgent简单学习
    TB2安装ubuntu16.04+kinetic的ROS包
    常用工具传送门
    ROS传送门
    结对第二次—文献摘要热词统计及进阶需求
    结对第一次—原型设计(文献摘要热词统计)
  • 原文地址:https://www.cnblogs.com/xiaolongchase/p/2143134.html
Copyright © 2011-2022 走看看