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

     分为小顶堆和大顶堆,小顶堆的性质是任何一个节点的两个字节点都比这个节点大,大顶堆相反

    在建立大顶堆的时候,我的理解是先建立一颗假的小顶堆,建立完之后,每次根节点和堆顶进行交换(因为堆顶能保证堆顶为当前所有数的最小),然后将堆的大小减去1,这样在对规格为n-1的堆进行调整,直到堆的大小为1

    然后调整完之后的数组,就是一个递减的数组

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 const int MAXSIZE = 100000;
     4 void judge(int a[], int pos, int n){
     5     int tmp = a[pos];
     6     int i, j;
     7     for(i = pos * 2; i <= n; i *= 2){
     8         i += i + 1 <= n && a[i] > a[i + 1];
     9         if(a[i] < tmp){
    10             swap(a[i], a[pos]);
    11             pos = i;
    12         }
    13         else
    14             break;
    15     }
    16 }
    17 void heapsort(int a[], int n){
    18     int i;
    19     for(i = n; i >= 1; i--){
    20         swap(a[1], a[i]);
    21         judge(a, 1, i - 1);
    22     }
    23     return ;
    24 }
    25 int main(){
    26     int a[MAXSIZE];
    27     int n, i;
    28     scanf("%d", &n);
    29     for(i = 1; i <= n; i++){
    30         scanf("%d", &a[i]);
    31     }
    32     for(i = n/2; i >= 1; i--){
    33         judge(a, i, n);
    34     }
    35     heapsort(a,n);
    36     for(i = 1; i <= n; i++){
    37     cout << " " << a[i];
    38     }
    39     return 0;
    40 }
  • 相关阅读:
    vue3.0配置代理proxy 解决跨域问题
    1/26 机器人未来待解决问题
    每日一诵
    2020/11/14 关于股票的价格
    2020/11/14 再思股票价值
    11/2 股票价值
    我们为什么会越来越笨
    关于追女朋友
    关于早睡早起
    vue学习心得
  • 原文地址:https://www.cnblogs.com/letlifestop/p/11611963.html
Copyright © 2011-2022 走看看