堆排序

 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 */

 

转载于:https://www.cnblogs.com/1129-tangqiyuan/p/11219220.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值