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

    #堆排序升序:
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    using namespace std;
    
    #define parent(i) (i)/2
    #define left(i) 2*(i)
    #define right(i) 2*(i)+1
    
    int size;
    
    void heapify(int a[], int i)
    {
        int l = left(i), r = right(i), largest;
        if(l<=size && a[l] > a[i])
            largest = l;
        else largest = i;
        if(r<=size && a[r] > a[largest])
            largest = r;
        if(largest != i)
        {
            int t = a[i];
            a[i] = a[largest];
            a[largest] = t;
            heapify(a, largest);
        }
    }
    
    void build_heap(int a[])
    {
        int len = size;
        for(int i=len/2; i>=1; i--)
            heapify(a, i);
    }
    
    void heap_sort(int a[])
    {
        build_heap(a);
        for(int i=size; i>=2; i--)
        {
            int t = a[1]; a[1] = a[i]; a[i] = t;
            size--;
            heapify(a, 1);
        }
    }
    
    int main()
    {
        int a[20];
        printf("请输入数据个数:
    ");
        scanf("%d", &size);
        int len = size;
        printf("请输入%d个你要排序的数:
    ", size);
        for(int i=1; i<=size; i++)
            scanf("%d", &a[i]);
        heap_sort(a);
        for(int i=1; i<len; i++)
            printf("%d ", a[i]);
        printf("%d
    ", a[len]);
        return 0;
    }
    
  • 相关阅读:
    python的虚拟环境管理
    树的转换
    表达式·表达式树·表达式求值
    找和为K的两个元素
    最大奇数与最小偶数之差的绝对值
    L1-026 I Love GPLT (5分)
    L1-025 正整数A+B (15分)
    L1-024 后天 (5分)
    L1-023 输出GPLT (20分)
    L1-022 奇偶分家 (10分)
  • 原文地址:https://www.cnblogs.com/xiao-xue-di/p/9454827.html
Copyright © 2011-2022 走看看