• 堆排序


    #堆排序升序:
    #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;
    }
    
  • 相关阅读:
    l2tp ubuntu
    my emacs fav config
    2048小游戏源码(vue自定义指令使用)
    Vue 脚手架新建项目
    vue中修改router定义的name值
    只能输入金额格式的input
    前端开发中UI问题处理
    form表单提交Ajax请求后不跳转
    小程序中代替v-html用法
    小程序中分页加载问题
  • 原文地址:https://www.cnblogs.com/xiao-xue-di/p/9454827.html
Copyright © 2020-2023  润新知