package com.example.insertsort;
import java.util.Arrays;
/**
* @BelongsProject: InsertSort
* @BelongsPackage: com.example.insertsort
* @Author:qiutianshuo
* @Description: 堆排序
* @CreateTime: 2023-04-29 11:01
* @Version: 1.0
*/
public class HeadSort_duipaixu {
/**
* 堆排序方法
* @param arr 待排序的数组
*/
public static void heapSort(int[] arr) {
// 构建初始大根堆
buildMaxHeap(arr);
// 从最后一个元素开始排序,一直到第二个元素
for (int i = arr.length - 1; i >= 1; i--) {
// 将当前堆顶元素与最后一个元素交换
swap(arr, 0, i);
// 重新构建大根堆
maxHeapify(arr, 0, i);
}
}
/**
* 构建初始大根堆
* @param arr 待排序的数组
*/
public static void buildMaxHeap(int[] arr) {
// 从最后一个非叶子节点开始往前构建大根堆
for (int i = arr.length / 2 - 1; i >= 0; i--) {
maxHeapify(arr, i, arr.length);
}
}
/**
* 在指定范围内构建大根堆
* @param arr 待排序的数组
* @param i 当前节点的下标
* @param heapSize 堆的大小
*/
public static void maxHeapify(int[] arr, int i, int heapSize) {
int left = 2 * i + 1; // 左孩子节点下标
int right = 2 * i + 2; // 右孩子节点下标
int largest = i; // 当前节点下标
// 如果左孩子节点比当前节点大,就将左孩子节点作为最大值
if (left < heapSize && arr[left] > arr[largest]) {
largest = left;
}
// 如果右孩子节点比最大值大,就将右孩子节点作为最大值
if (right < heapSize && arr[right] > arr[largest]) {
largest = right;
}
// 如果最大值不是当前节点,就将最大值与当前节点交换,并继续向下构建大根堆
if (largest != i) {
swap(arr, i, largest);
maxHeapify(arr, largest, heapSize);
}
}
/**
* 交换数组中两个元素的位置
* @param arr 待交换的数组
* @param i 第一个元素的下标
* @param j 第二个元素的下标
*/
public static void swap(int[] arr, int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
public static void main(String[] args) {
int[] arr = {64, 25, 12, 22, 11};
heapSort(arr);
System.out.print("最终结果"+ Arrays.toString(arr));
}
}
Java代码-排序-直接插入排序、希尔排序、直接选择排序、冒泡排序、堆排序、快速排序、归并排序中部分排序以及算法-贪心法
需积分: 0 93 浏览量
2023-05-29
11:38:43
上传
评论
收藏 8KB ZIP 举报
江流儿
- 粉丝: 6037
- 资源: 5
最新资源
- 基于MIC+NE555光敏电阻的声光控电路Multisim仿真原理图
- python tkinter-08-盒子模型.ev4.rar
- Doozy UI Manager 2023
- 基于matlab实现夜间车牌识别程序(1).rar
- 基于matlab实现无线传感器网络无需测距定位算法matlab源代码 包括apit,dv-hop,amorphous在内的共7个
- 基于python的yolov5实现的旋转目标检测
- 基于matlab实现无线传感器网络 CAB定位仿真程序 这是无线传感器节点定位CAB算法的仿真程序,由matlab完成.rar
- 基于matlab实现图像处理,本程序使用背景差分法对来往车辆进行检测和跟踪.rar
- 基于matlab实现视频监控中车型识别代码,自己写的,希望和大家多多交流.rar
- springcodespringcodespringcodespringcode
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈