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

堆排序

时间:2019-11-11 00:18:36      阅读:101      评论:0      收藏:0      [点我收藏+]

标签:heap   nbsp   void   lin   int   ==   api   build   --   

 1 inline int LEFT(int i)
 2 {
 3     return (i * 2 + 1);
 4 }
 5 
 6 inline int RIGHT(int i)
 7 {
 8     return (i * 2 + 2);
 9 }
10 
11 void swap(int &i, int &j)
12 {
13     int temp = i;
14     i = j;
15     j = temp;
16 }
17 
18 void max_heapify(int a[], int n, int i)
19 {
20     int left = LEFT(i);
21     int right = RIGHT(i);
22     int max_idx = (left < n && a[i] < a[left]) ? left : i;
23     max_idx = (right < n && a[max_idx] < a[right]) ? right : max_idx;
24     if (i == max_idx) {
25         return;
26     }
27     swap(a[i], a[max_idx]);
28     max_heapify(a, n, max_idx);
29 }
30 
31 void build_max_heap(int a[], int n)
32 {
33     for (int i = n / 2 - 1; i >= 0; i--) {
34         max_heapify(a, n, i);
35     }
36 }
37 
38 void heap_sort(int a[], int n)
39 {
40     build_max_heap(a, n);
41     for (int i = n - 1; i > 0; i--) {
42         swap(a[i], a[0]);
43         max_heapify(a, i, 0);
44     }
45 }

 

堆排序

标签:heap   nbsp   void   lin   int   ==   api   build   --   

原文地址:https://www.cnblogs.com/ren-yu/p/11832442.html

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