堆排序的实现

用大顶堆实现堆排序

template <typename T>
void __shiftDown(T arr[],int n,int k){
    while (k * 2 +1 < n) {
        int j = 2 * k + 1;
        if (j + 1 < n && arr[j] < arr[j + 1])
            j += 1;
        
        if (arr[k] >= arr[j])
            break;
        swap(arr[k], arr[j]);
        k = j;
    }
}
template <typename T>
//原地排序
void heapSort(T arr[],int n){
    //heapify
    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);
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 排序的基本概念 在计算机程序开发过程中,经常需要一组数据元素(或记录)按某个关键字进行排序,排序完成的序列可用于快...
    Jack921阅读 5,352评论 1 4
  • 排序大的分类可以分为两种:内排序和外排序。在排序过程中,全部记录存放在内存,则称为内排序,如果排序过程中需要使用外...
    文哥的学习日记阅读 4,681评论 2 10
  • 概述 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部...
    蚁前阅读 10,587评论 0 52
  • 今天下午奶奶去接的孩子,回家时,在路边奶奶给买的粽子,回家后吃了个粽子,就做作业了,她说妈妈,我做作业,你写日记,...
    朱雨辰妈妈阅读 1,326评论 0 0
  • 我 | 汪莉 喜欢世间一切美好的事物 难道我还拥有着天真的童心 总是用简单的方式看待问题 我的脑袋天生就是这样 还...
    汪莉_4c55阅读 1,508评论 0 2