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);  //
        }
    }

}
复制代码

结果截图:

 

posted @   睡觉不困  阅读(43)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
点击右上角即可分享
微信分享提示