java堆排序
直接贴源代码:
package com.java.fmd; import java.util.Scanner; public class HeapSort { int[] arr; public static void main(String[] args) { // TODO Auto-generated method stub Scanner sc = new Scanner(System.in); int n=0; System.out.println("请输入长度:"); n=sc.nextInt(); HeapSort heapSor = new HeapSort(); int[] arr = new int[n+1]; //0下标放的是数组长度, arr[0]=n; System.out.println("请输入相应个数的数字:"); for(int i=1;i<=n;i++) { arr[i]=sc.nextInt(); } heapSor.arr = arr; heapSor.heapSort(arr); System.out.println("排序结果为:"); for(int i=1;i<arr.length;i++) System.out.print(arr[i]+" "); } void heapAdjust(int[] arr,int s,int m){ //已知arr[s...m]中记录的关键字除arr[s]之外均满足堆的定义,本函数调整arr[s]的关键字,使arr[s...m]成为一个最大堆 int rc = arr[s]; //s是最后一个非叶子节点 for(int j=2*s;j <= m;j = s*2){ if(j<m && arr[j]<arr[j+1]) j++; //j为key较大的下标 if(rc >= arr[j]) break; arr[s] = arr[j]; //上移到父节点 s=j; } arr[s]=rc; //要放入的位置 } void heapSort(int[] arr){ //对数组进行建堆操作,就是从最后一个非叶结点进行筛选的过程 for(int i=(arr.length-1)/2;i > 0;i--){//因为0没有使用,所以length-1 heapAdjust(arr,i,arr.length-1); } outputArr(1); for(int i=arr.length-1; i>1; i--){ int temp = arr[1]; arr[1] = arr[i]; arr[i] = temp; heapAdjust(arr,1,i-1); } } void outputArr(int i){ if(i <= arr[0]){ //System.out.println(arr[i]); outputArr(i*2); //左 outputArr(i*2+1); //右 } } }
结果截图:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!