zoukankan      html  css  js  c++  java
  • 堆排序

    #include<iostream>
    #include<vector>
    #include<set>
    #include<cmath>
    using namespace std;
    
    int lChild(int i)
    {
        return 2*i;
    }
    
    int rChild(int i)
    {
        return 2*i + 1;
    }
    
    void swap(int &a, int &b)
    {
        int t = a;
        a = b;
        b = t;
    }
    
    //min-heap
    void sift_down(int a[], int n, int i)
    {
        int min = i;
        int l = lChild(i);
        int r = rChild(i);
    
        if(l<=n && a[l]<a[min])
            min = l;
        
        if(r<=n && a[r]<a[min])
            min = r;
        if(i != min)
        {
            swap(a[i], a[min]);
            sift_down(a,n,min);
        }
    }
    
    void make_heap(int a[], int n)
    {
        int i = 0;
        for(i=1; i<=n/2; i++)
        {
            sift_down(a,n,i);
        }
    }
    
    void heap_sort(int a[], int n)
    {
        make_heap(a,n);
        int size = n;
        int i = 0;
        for(i=n; i>=1; i--)
        {
            swap(a[i],a[1]);
            size--;
            sift_down(a,size,1);
        }
    }
    
    int main()
    {
        int a[100];
        int n;
        while(cin>>n)
        {
            int i = 0;
            for(i=1; i<=n; i++)
                cin>>a[i];
            heap_sort(a,n);
            for(i=1; i<=n; i++)
                cout<<a[i]<<" ";
            cout<<endl;
        }
        return 0;
    }
    多学习,多总结。
  • 相关阅读:
    第二次作业
    动手动脑
    第五周总结
    第四周总结
    二维数组
    返回一个整数数组中最大子数组的和---第一次完善
    第三周总结
    第二周进度
    自我介绍
    返回一个整数数组中最大子数组的和
  • 原文地址:https://www.cnblogs.com/yanhaiming/p/2972402.html
Copyright © 2011-2022 走看看