【刷题之路】堆排序

原创 2016年05月30日 21:12:01

经典算法

class HeapSort {
public:
    int* heapSort(int* A, int n) {
        // write code her
        maxheap(A,n);
        for(int i=n-1;i>=0;i--){
            swap(A[0],A[i]); //大根堆堆顶元素为堆中最大的,将堆顶元素移到数组尾部,并且将最后一个元素移过来,重新调整(n-1)个数的大根堆
            fixdown(A,0,i);
        }
        return A;


    }
        void maxheap(int num[],int n) //建立大根堆,从倒数第一个父节点开始调整


            int i;
            for(i=n/2-1;i>=0;i--){
                fixdown(num,i,n-1);
            }
        }
        void fixdown(int nums[],int i,int n) //堆调整

{
            int j,temp;
            int flag=1;
            while(2*i+1<n && flag)

{
                if(2*i+2>n-1) j=2*i+1; //首先选择头结点的两个子节点中较大的一个
                else if(nums[2*i+1]<nums[2*i+2] && i*2+2< n) j=2*i+2;
                else j=2*i+1;
                if(nums[i]<nums[j]) //如果头结点小于较大节点,则交换位置,因为之前的位置是调整好的,所以只需要调整num[i]即可,重复操作直到新加入节点下沉到一个合适的位置

{
                    temp=nums[i];
                    nums[i]=nums[j];
                    nums[j]=temp;
                    i=j;
                }
                else flag=0;
            }
  
        }
};

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

【刷题之路】小范围排序练习

已知一个几乎有序的数组,几乎有序是指,如果把数组排好顺序的话,每个元素移动的距离可以不超过k,并且k相对于数组来说比较小。请选择一个合适的排序算法针对这个数据进行排序。给定一个int数组A,同时给定A...

每天一道编程题(九)----------堆排序

首先来描述一下堆这种数据结构,我们现在所说的堆一般就是指二叉堆,所以下面我就统一把堆默认为二叉堆。堆是一棵被完全填满的二叉树,设树的高度为h,即从第1层到第h-1层,树的节点都是被填满的,唯一有例外的...

堆排序之Java实现

  • 2017年07月27日 17:03
  • 4KB
  • 下载

堆排序法.cpp

  • 2015年07月26日 12:45
  • 2KB
  • 下载

实现选择排序和堆排序——题集(十六)

实现选择排序和堆排序——题集(十七) 今天分享一下实现选择排序和堆排序的源代码和测试用例。 实现选择排序的源代码和运行示例。 源代码如下: #include using namespace std; ...

堆排序及其用途

  • 2016年03月25日 13:46
  • 214KB
  • 下载

堆排序算法c语言实现

  • 2015年10月25日 14:24
  • 2KB
  • 下载

【学习ios之路:Objective-C】OC中常用的系统排序方法

①.OC中常用排序方法: 1).不可变数组 - (NSArray *)sortedArrayUsingSelector:(SEL)comparator; - (NSArray *)sortedArra...
  • ZFX5130
  • ZFX5130
  • 2015年01月05日 22:21
  • 1464

堆排序

  • 2014年12月25日 21:57
  • 205KB
  • 下载

堆排序算法导论

  • 2013年11月11日 23:54
  • 152KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【刷题之路】堆排序
举报原因:
原因补充:

(最多只允许输入30个字)