Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说
堆排序原地升序排序_堆排序初始堆的过程,希望能够帮助你!!!。
之前介绍了堆排序,现在我们来聊聊原地堆排序
【代码】
//原地堆排序 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为原地堆排序,可以看出,原地堆排序性能比之前两种堆排序效率都要高,但是还是次于快速排序
今天的分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
上一篇
已是最后文章
下一篇
已是最新文章