【刷题之路】堆排序

原创 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;
            }
  
        }
};

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

经典算法——堆排序笔试题

阿里巴巴2016研发工程师笔试选择题 1.将整数数组(7-6-3-5-4-1-2)按照堆排序的方式原地进行升序排列,请问在第一轮排序结束之后,数组的顺序是_____。...
  • geekmanong
  • geekmanong
  • 2016年04月21日 15:44
  • 1871

程序员常用的刷题网站

1、Lintcode Lintcode.com——LintCode网站是国内较大的在线编程&测评网站。此网站提供各大IT公司的算法面试题类型,行分门别类,由简单到中等,再到难,便于不同水平的程序员进...
  • Winnielyn623
  • Winnielyn623
  • 2017年07月26日 18:20
  • 2763

程序员必备技术网站及刷题网站 | Java我最强

今天小编为各位程序员总结了一些必备的 技术网站和刷题网站 技术网站  https://github.com/ 开源代码库以及版本控制系统。 ...
  • Java_wozuiqiang
  • Java_wozuiqiang
  • 2017年07月28日 17:11
  • 2918

Java 刷题

Java抽象类可以实例化吗? 抽象类不能用来创建对象;方法重载(overload): 1.必须是同一个类 2方法名(也可以叫函数)一样 3参数类型不一样或参数数量不一样方法的重写(overri...
  • u012063703
  • u012063703
  • 2016年01月18日 17:48
  • 1695

谈谈程序员面试之刷题

前一段时间有一个非常有趣的故事(http://www.pingwest.com/sorry-cant-hire-you/  ),Max Howell (Homebrew的作者) 在 Google 面试...
  • github_39335046
  • github_39335046
  • 2017年06月29日 17:03
  • 2061

Python 刷题(想练python的可以对着刷一刷,持续更新)

这道题的意思是说
  • geniusluzh
  • geniusluzh
  • 2014年04月23日 10:36
  • 8146

LintCode刷题(入门篇)

LintCode(入门篇)
  • tianshuai4317618
  • tianshuai4317618
  • 2017年11月06日 15:21
  • 111

我该怎样高效刷题?

写到这个题目HDU1176,起初一看,一点思路都没有,真的!感觉不会很难,去Discuss里面看了一下,看到一个人代码,他说这是数塔问题!我认真的看了一下他的代码,然后又去详细的查了一下关于数塔的知识...
  • wlxsq
  • wlxsq
  • 2016年04月24日 13:41
  • 783

一个不错的中文刷题网站

http://www.itint5.com/oj/
  • SushiPlus
  • SushiPlus
  • 2014年01月06日 04:22
  • 1767

国内C/C++刷题网站汇总

作者:Luau Lawrence 链接:https://www.zhihu.com/question/25574458/answer/31175374 来源:知乎 - Welcome T...
  • liusandian
  • liusandian
  • 2016年06月22日 12:27
  • 1130
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【刷题之路】堆排序
举报原因:
原因补充:

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