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

堆排序

时间:2017-03-31 15:50:54      阅读:242      评论:0      收藏:0      [点我收藏+]

标签:pac   style   oid   main   堆排   namespace   节点   break   str   

 1 #include<iostream>
 2 using namespace std;
 3 int heap[101];
 4 int heap_size;
 5 void put(int d)                 //heap[1]为堆顶   插入 
 6 {
 7     int now, next;
 8     heap[++heap_size] = d;
 9     now = heap_size;
10     while(now > 1)
11     {
12         next = now/2;// 父节点 
13         if(heap[now] >= heap[next]) 
14         break;
15         swap(heap[now], heap[next]);
16         now = next;
17     }
18 }
19 int get()                //heap[1]为堆顶  获取 
20 {
21     int now=1, next, res= heap[1];
22     heap[1] = heap[heap_size--];//取出末尾元素 
23     while(now * 2 <= heap_size)
24     {
25         next = now * 2;// next 左孩子 
26         if (next < heap_size && heap[next + 1] < heap[next])
27         next++;
28         if (heap[now] <= heap[next]) 
29         break;
30         swap(heap[now], heap[next]);
31         now = next;
32     }
33     return res;
34 }
35 
36 int main()
37 {
38     int n;
39     cin>>n;
40     for(int i=1;i<=n;i++)
41     {
42         int dr;
43         cin>>dr;
44         put(dr);
45     }
46     for(int i=1;i<=n;i++)
47     {
48         cout<<get()<<endl;
49     }
50     return 0;
51 }

 

堆排序

标签:pac   style   oid   main   堆排   namespace   节点   break   str   

原文地址:http://www.cnblogs.com/zwfymqz/p/6651448.html

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