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

堆排序

时间:2019-07-20 21:32:30      阅读:105      评论:0      收藏:0      [点我收藏+]

标签:堆排   排序   void   out   date   pac   include   amp   i++   

 1 #include<iostream>
 2 using namespace std;
 3 int n;
 4 int a[100];
 5 
 6 void update(int x,int m)//下沉
 7 {
 8     int l=x*2;
 9     if(l>m)return;
10     if(l<m&&a[l]<a[l+1])l++;
11     if(a[l]>a[x])swap(a[l],a[x]);//维护大小根堆
12     update(l,m);
13 }
14 void heap_sort()//排序
15 {
16     for(int i=n;i>=1;i--)update(i,n);
17     for(int i=n-1;i>=1;i--)
18     {
19         swap(a[1],a[i+1]);//每次将堆顶放入最后一个位置(可以用来维护排序大小)
20         update(1,i);
21     }
22 }
23 int main()
24 {
25     cin>>n;
26     for(int i=1;i<=n;i++)cin>>a[i];
27     heap_sort();
28     for(int i=1;i<=n;i++)cout<<a[i]<<" ";
29 }
30 /*
31 #include<iostream>
32 #include<algorithm>
33 using namespace std;
34 int a[100];
35 int n; 
36 
37 void update(int x,int m)
38 {
39     int t=x*2;
40     if(t>m)return;
41     if(t<m&&a[t+1]>a[t])t++;
42     if(a[t]>a[x])swap(a[t],a[x]);
43     update(t,m);
44 }
45 void heap_sort()
46 {
47     for(int i=n;i>=1;i--)update(i,n);
48     for(int i=n-1;i>=1;i--)
49     {
50         swap(a[i+1],a[1]);
51         update(1,i);
52     }
53 }
54 int main()
55 {
56     cin>>n;
57     for(int i=1;i<=n;i++)cin>>a[i];
58     heap_sort();
59     for(int i=1;i<=n;i++)cout<<a[i]<<" ";
60 }
61 
62 */

 

堆排序

标签:堆排   排序   void   out   date   pac   include   amp   i++   

原文地址:https://www.cnblogs.com/1129-tangqiyuan/p/11219220.html

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