堆排序

 1 #include<iostream>
 2 
 3 using namespace std;
 4 
 5 void adjust(int* tree, const int r, const int n)
 6 {
 7     int e = tree[r];
 8     int i;
 9     for (i = 2*r; i<=n; i*=2)
10     {
11         if ( (i<n) && (tree[i]<tree[i+1]) )
12             i++;
13         if ( e >= tree[i] )
14             break;
15         tree[i/2] = tree[i];
16     }
17     tree[i/2] = e;
18 }
19 
20 int main()
21 {
22     int tree[100];
23     int n,i;
24     cin>>n;
25     for ( i=0;i<n;i++)
26         cin>>tree[i+1];
27     for ( i=n/2;i>0;i--)
28         adjust(tree,i,n);
29     for ( i=n;i>1;i--)
30     {
31         int e=tree[i];
32         tree[i] = tree[1];
33         tree[1] = e;
34         adjust(tree,1,i-1);
35     }
36     for ( i=1;i<=n;i++)
37     {
38         cout<<tree[i]<<' ';
39     }
40     cout<<endl;
41 }
View Code

 

posted on 2017-04-19 14:46  Valenpqq  阅读(73)  评论(0)    收藏  举报