堆排序

第7节 堆排序练习题

对于一个int数组,请编写一个堆排序算法,对数组元素排序。

给定一个int数组A及数组的大小n,请返回排序后的数组。

测试样例:
[1,2,3,5,2,3],6
[1,2,2,3,3,5]
 
Java (javac 1.7)

代码自动补全

 
 
 
 
 
1
import java.util.*;
2

3
public class HeapSort {
4
    public int[] heapSort(int[] A, int n) {
5
        int lastIndex = n - 1;
6
        buildMaxHeap(A, lastIndex);//建立最大堆
7
        while(lastIndex > 0){
8
            swap(A, 0, lastIndex);
9
            if(--lastIndex == 0)//只剩一个元素,就不用调整堆了,排序结束
10
                break;
11
            adjustHeap(A,0,lastIndex);    
12
        }
13
        return A;
14
    }
15

16
    public void buildMaxHeap(int[] arr, int lastIndex) {
17
        // 从最后一个元素的父节点开始进行调整,一直调整到根节点结束
18
        int j = (lastIndex - 1) / 2;
19
        while (j >= 0) {
20
            int rootIndex = j;
21
            adjustHeap(arr, rootIndex, lastIndex);
22
            j--;
23
        }
24
    }
25

26
    public void adjustHeap(int[] arr, int rootIndex, int lastIndex) {//从根节点开始往下调整
27
        int biggerIndex = rootIndex;
28
        int leftChildIndex = rootIndex * 2 + 1; 
29
        int rightChildIndex = rootIndex * 2 + 2;
30

31
        if(rightChildIndex <= lastIndex){//如果右孩子存在,则左孩子一定存在
32
            if(arr[rightChildIndex] > arr[rootIndex] || arr[leftChildIndex] > arr[rootIndex]){
33
                //将子节点更大的元素下标赋值给biggerIndex
34
                biggerIndex = arr[rightChildIndex] > arr[leftChildIndex]?rightChildIndex:leftChildIndex;
35
            }
36
        }
37
        else if(leftChildIndex <= lastIndex){//保证左孩子存在,且不能越界
38
            if(arr[leftChildIndex] > arr[rootIndex]){
39
                biggerIndex = leftChildIndex;
40
            }
41
        }
42
        if(biggerIndex != rootIndex){
43
            swap(arr, biggerIndex, rootIndex);
44
            adjustHeap(arr, biggerIndex, lastIndex);
45
        }
46

47
    }
48

49
    public void swap(int[] arr, int biggerIndex, int rootIndex) {
50
        int temp = arr[rootIndex];
51
        arr[rootIndex] = arr[biggerIndex];
52
        arr[biggerIndex] = temp;
53
    }
54
}
 
 
您的代码已保存
答案正确:恭喜!您提交的程序通过了所有的测试用例

算法-java代码实现堆排序的更多相关文章

  1. 排序算法Java代码实现(一)—— 选择排序

    以下几篇随笔都是记录的我实现八大排序的代码,主要是贴出代码吧,讲解什么的都没有,主要是为了方便我自己复习,哈哈,如果看不明白,也不要说我坑哦! 本片分为两部分代码: 常用方法封装 排序算法里需要频繁使 ...

  2. 排序算法Java代码实现(六)—— 堆排序

    本片内容: 堆排序 堆排序 最大堆: 二叉堆是完全二叉树或者是近似完全二叉树, 当父结点的键值总是大于或等于任何一个子节点的键值时为最大堆.(父节点大于任何一个子节点) 算法思想: 把n个元素建立最大 ...

  3. 算法-java代码实现基数排序

    基数排序 第11节 基数排序练习题 对于一个int数组,请编写一个基数排序算法,对数组元素排序. 给定一个int数组A及数组的大小n,请返回排序后的数组.保证元素均小于等于2000. 测试样例: [1 ...

  4. 算法-java代码实现计数排序

    计数排序   第10节 计数排序练习题 对于一个int数组,请编写一个计数排序算法,对数组元素排序. 给定一个int数组A及数组的大小n,请返回排序后的数组. 测试样例: [1,2,3,5,2,3], ...

  5. 算法-java代码实现希尔排序

    希尔排序 第8节 希尔排序练习题 对于一个int数组,请编写一个希尔排序算法,对数组元素排序. 给定一个int数组A及数组的大小n,请返回排序后的数组.保证元素小于等于2000. 测试样例: [1,2 ...

  6. 算法-java代码实现快速排序

    快速排序 对于一个int数组,请编写一个快速排序算法,对数组元素排序. 给定一个int数组A及数组的大小n,请返回排序后的数组. 测试样例: [1,2,3,5,2,3],6 [1,2,2,3,3,5] ...

  7. 算法-java代码实现归并排序

    归并排序 对于一个int数组,请编写一个归并排序算法,对数组元素排序. 给定一个int数组A及数组的大小n,请返回排序后的数组. 测试样例: [1,2,3,5,2,3],6 [1,2,2,3,3,5] ...

  8. 常见排序&查询算法Java代码实现

    1. 排序算法代码实现 /** * ascending sort * 外层循环边界条件:总共需要冒泡的轮数--每一轮都将最大或最小的数冒泡到最后 * 内层循环边界条件:冒泡数字移动的边界--最终数字需 ...

  9. 排序算法Java实现(堆排序)

    算法描述:对于给定的n个记录,初始时把这些记录看作一棵顺序存储的二叉树,然后将其调整为一个大顶堆,然后将堆的最后一个元素与堆顶元素进行交换后,堆的最后一个元素即为最大记录:接着将前(n-1)个元素重新 ...

随机推荐

  1. 连接虚拟机mysql无法访问,报错编号1130的解决方法

    新装一台虚拟机mysql的时候,往往会出现win无法连接的情况,报错信息1130,是因为没有权限的问题,解决方案如下: mysql -u root -p mysql>use mysql; mys ...

  2. Linux发行版 CentOS6.5 禁用防火墙步骤

    本文地址http://comexchan.cnblogs.com/,尊重知识产权,转载请注明出处,谢谢! 注意:此操作需要使用root权限执行 首先查询防火墙状态: service iptables ...

  3. Java后端程序员都做些什么?

    这个问题来自于QQ网友,一句两句说不清楚,索性写个文章. 我刚开始做Web开发的时候,根本没有前端,后端之说. 原因很简单,那个时候服务器端的代码就是一切:接受浏览器的请求,实现业务逻辑,访问数据库, ...

  4. Oracle学习笔记_09_字符串相关函数

    二.参考资料 0.Oracle中的字符串类型及相关函数详解 1.ORACLE 字符串操作 2.oracle函数大全-字符串处理函数

  5. windows下查看端口占用情况及关闭相应的进程

    经常,我们在启动应用的时候发现系统需要的端口被别的程序占用,如何知道谁占有了我们需要的端口,很多人都比较头疼,下面就介绍一种非常简单的方法. 例如:需要查看9001端口被谁占用,并将其进程强制关闭 在 ...

  6. 利用伪元素:after清除浮动

    一.代码 html代码 <div class="clearfix"></div> css样式 .clearfix{ zoom:1;/*这个属性是为了兼容IE ...

  7. Android应用程序启动时发生AndroidRuntime : ClassNotFoundException for Activity class的解决方法

    在android应用程序启动时抛出下面异常导致启动失败:07-09 17:12:35.709: ERROR/AndroidRuntime(3866): Uncaught handler: thread ...

  8. SQL Server Service Broker创建单个数据库会话

    概述 SQL Server Service Broker 用来创建用于交换消息的会话.消息在目标和发起方这两个端点之间进行交换.消息用于传输数据和触发消息收到时的处理过程.目标和发起方既可以在同一数据 ...

  9. Java学习笔记20(String类应用、StringBuffer类、StringBuilder类)

    1.获取指定字符串中大小写和数字的个数: package demo; public class StringTest { public static void main(String[] args) ...

  10. kindeditor 上传下载文件

    jsp代码 1 <script type="text/javascript" src="${pageContext.request.contextPath}/kin ...