码迷,mamicode.com
首页 > 编程语言 > 详细

堆排序

时间:2019-09-30 12:50:41      阅读:86      评论:0      收藏:0      [点我收藏+]

标签:排序   size   bit   style   c++   include   heap   return   ++   

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

在建立大顶堆的时候,我的理解是先建立一颗假的小顶堆,建立完之后,每次根节点和堆顶进行交换(因为堆顶能保证堆顶为当前所有数的最小),然后将堆的大小减去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 }

 

堆排序

标签:排序   size   bit   style   c++   include   heap   return   ++   

原文地址:https://www.cnblogs.com/letlifestop/p/11611963.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!