zoukankan      html  css  js  c++  java
  • 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);  //
            }
        }
    
    }

    结果截图:

  • 相关阅读:
    Excel电子表格操作
    word文档编辑
    中英文输入
    个人借款合同范本
    Day-8:汇总数据
    Day-7:使用函数处理数据
    Day-6:创建计算字段
    Day-5:通配符过滤
    Day-4:高级数据过滤
    Day-3:过滤数据
  • 原文地址:https://www.cnblogs.com/yuxuan-light-of-Taihu-Lake/p/14953289.html
Copyright © 2011-2022 走看看