堆排序原地升序排序_堆排序初始堆的过程

(2) 2024-06-29 09:23

Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说
堆排序原地升序排序_堆排序初始堆的过程,希望能够帮助你!!!。

之前介绍了堆排序,现在我们来聊聊原地堆排序
堆排序原地升序排序_堆排序初始堆的过程_https://bianchenghao6.com/blog__第1张
【代码】

//原地堆排序 template<typename T> void heapSort3(T arr[], int n) { 
    //将数组构建成一个堆 for(int i = (n - 1) / 2; i >= 0; i--) { 
    __shiftDown(arr, n, i); } for(int i = n - 1; i > 0; i--) { 
    swap(arr[0], arr[i]); __shiftDown(arr, i, 0); } } template<typename T> void __shiftDown(T arr[], int n, int k) { 
    while( 2 * k + 1< n) { 
    int j = 2 * k + 1; while((j + 1) < n && arr[j] < arr[j+1]) { 
    j = j + 1; } if(arr[j] <= arr[k]) { 
    break; } swap(arr[k], arr[j]); k = j; } } 

【测试结果】Heap Sort3为原地堆排序,可以看出,原地堆排序性能比之前两种堆排序效率都要高,但是还是次于快速排序
堆排序原地升序排序_堆排序初始堆的过程_https://bianchenghao6.com/blog__第2张

今天的分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

上一篇

已是最后文章

下一篇

已是最新文章

发表回复