堆排序

 1 void heapify(int arr[], int n, int i)
 2 {
 3     int largest = i; // 将最大元素设置为堆顶元素
 4     int l = 2 * i + 1; // left = 2*i + 1 
 5     int r = 2 * i + 2; // right = 2*i + 2 
 6 
 7                        // 如果 left 比 root 大的话
 8     if (l < n && arr[l] > arr[largest])
 9         largest = l;
10 
11     // I如果 right 比 root 大的话
12     if (r < n && arr[r] > arr[largest])
13         largest = r;
14 
15     if (largest != i)
16     {
17         swap(arr[i], arr[largest]);
18 
19         // 递归地定义子堆,只用定义被破坏的子堆即可
20         heapify(arr, n, largest);
21     }
22 }
23 
24 void heapSort(int arr[], int n)
25 {
26     // 建立堆,从第一个非叶子节点开始
27     for (int i = n / 2 - 1; i >= 0; i--)
      //n是最大元素下标,i是要调整树的根
28 heapify(arr, n, i); 29 30 // 一个个从堆顶取出元素,因为只有堆顶是最大,其他地方还无序,所以每取出一个最大的放到最后,就要调整一次堆 31 for (int i = n - 1; i >= 0; i--) 32 { 33 swap(arr[0], arr[i]); 34 heapify(arr, i, 0); 35 } 36 }

 

原文链接: https://www.cnblogs.com/wangshaowei/p/11377544.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    堆排序

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/391452

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月31日 上午10:36
下一篇 2023年3月31日 上午10:36

相关推荐