博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
排序算法-堆排序
阅读量:3960 次
发布时间:2019-05-24

本文共 1578 字,大约阅读时间需要 5 分钟。

package com.chenjian.heapsort;import java.util.Arrays;public class HeapSort {
public static void main(String[] args) {
int[] arr = {
4,6,8,5,9}; heapSort(arr); } public static void heapSort(int[] arr) {
//将无序序列构成一个堆 int temp = 0; //i为非叶子节点的索引 for(int i = arr.length / 2 - 1; i >= 0; i--) {
adjustHeap(arr, i, arr.length); } //将大顶堆变为升序数组 只需要排arr.length-1个 最后一个自然就好了 for(int j = arr.length - 1; j > 0; j--) {
//将最后一个元素与第0个位置的元素进行交换,互换后末尾的元素就是最大的 temp = arr[j]; arr[j] = arr[0]; arr[0] = temp; //j为每次需要调整的元素的数量,每次的数量慢慢减少,在把它变为大顶堆 adjustHeap(arr, 0, j); } System.out.println(Arrays.toString(arr)); } /** * * @param arr 待调整的数组 * @param i 表示非叶子节点在数组中的索引 * @param length 表示对多少个元素进行调整 length是在逐渐的减少 也是数组的长度 */ public static void adjustHeap(int[] arr, int i, int length) {
int temp = arr[i];//先取出当前元素的值 保存在临时变量 //开始调整 //k为i的左子节点 k = k * 2 + 1 表示找到k的左子节点 for(int k = i * 2 + 1; k < length; k = k * 2 + 1) {
if(k + 1 < length && arr[k] < arr[k + 1]) {
//左子节点小于右子节点 k++; //k指向右子节点 } if(arr[k] > temp) {
//如果子节点大于 父节点 arr[i] = arr[k];//把子节点赋给父节点 i = k;//i指向k,继续循环比较 }else {
break; } } //for循环结束后 我们已经将以i为父节点的树最大值,放在了最顶(局部) arr[i] = temp;//将temp放在调整后的位置 此时以i为根节点的树已经是一个大顶堆 }}

转载地址:http://ixhzi.baihongyu.com/

你可能感兴趣的文章
Android自动化工具Monkeyrunner使用(五)
查看>>
Selenium-webdriver系列教程(7)———如何处理alert和confirm
查看>>
Selenium-webdriver系列教程(8)———使用Page Object设计模式
查看>>
Python logging模块详解
查看>>
加载selenium2Library失败---robotframework环境搭建(RIDE无法启动?)
查看>>
Robot Framework 的安装配置和简单的实例介绍
查看>>
APP功能测试的7大注意点
查看>>
Python之unittest
查看>>
Fiddler之——Fiddler简介
查看>>
Fiddler之——Fiddler抓包分析
查看>>
Android开发之——activity跳转
查看>>
Android开发之——Menu 操作
查看>>
Android开发之——布局实例
查看>>
Android开发之——SQLite使用方法
查看>>
Python之SMTP发送邮件
查看>>
手动测试无法被取代的理由
查看>>
浅析移动测试:应用上线不“裸奔”的正确方式
查看>>
Robot Framework之元素定位
查看>>
性能测试方案之性能测试术语解释
查看>>
性能测试方案之性能测试方法
查看>>