zoukankan      html  css  js  c++  java
  • java语言实现堆排序

    package secondChapter;
    
    import java.util.Random;
    
    public class HeapSort {
        
        private static int AHeapSize;
        
        public static void main(String[] args) {
            
            HeapSort hs = new HeapSort();
            int[] A = new int[10];
            //产生随机数组
            for(int i=0;i<A.length;i++){
                A[i] = hs.generateRandomInt(50);
            }
            System.out.print("Original array:");
            for (int i = 0; i < A.length; i++) {
                System.out.print(A[i]+" ");
            }
            System.out.println();
            
            hs.heap_sort(A);
            
            System.out.print("Sorted array: ");
            for (int i = 0; i < A.length; i++) {
                System.out.print(A[i]+" ");
            }
        }
        
        //HEAPSORT过程
        public void heap_sort(int[] A) {
            AHeapSize = A.length;
            build_max_heap(A);
            
            System.out.print("build_max_heap: ");
            for (int i = 0; i < A.length; i++) {
                System.out.print(A[i]+" ");
            }
            System.out.println();
            
            
            for(int i=A.length;i>1;i--){
                int temp = A[0];
                A[0] = A[i-1];
                A[i-1] = temp;
                
                AHeapSize -= 1;
                max_heapify(A,1);
            }
        }
        
        //HUILD-MAX-HEAP过程
        public void build_max_heap(int[] A) {
            for(int i=A.length/2;i>0;i--){
                max_heapify(A,i);
            }
        }
        
        //MAX-HEAPIFY过程
        public void max_heapify(int[] A, int i) {    //i为 元素下标+1
            int l = 2*i;
            int r = 2*i+1;
            
            int largest;
            if(l<=AHeapSize && A[l-1]>A[i-1]){
                largest = l;
            }else{
                largest = i;
            }
            if(r<=AHeapSize && A[r-1]>A[largest-1]){
                largest = r;
            }
            if(largest!=i){
                int temp = A[i-1];
                A[i-1] = A[largest-1];
                A[largest-1] = temp;
                
                max_heapify(A, largest);
            }
        }
        
        private Random rd = new Random();
        public int generateRandomInt(int bound) {
            return rd.nextInt(bound);
        }
        
    }

    输出结果:

    Original array:40 44 11 43 25 0 7 14 34 14
    build_max_heap: 44 43 11 40 25 0 7 14 34 14
    Sorted array: 0 7 11 14 14 25 34 40 43 44

  • 相关阅读:
    复杂链表的复制
    [CSP-S模拟测试]:抽卡(概率DP)
    [CSP-S模拟测试]:计划(前缀和)
    [CSP-S模拟测试]:公园(BFS+剪枝)
    [CSP-S模拟测试]:长寿花(DP+组合数)
    [CSP-S模拟测试]:喝喝喝(模拟)
    [CSP-S模拟测试]:次芝麻(数学)
    [CSP-S模拟测试]:赤壁情(DP)
    [CSP-S模拟测试]:密州盛宴(贪心)
    [CSP-S模拟测试]:春思(数学)
  • 原文地址:https://www.cnblogs.com/ming-zi/p/6048120.html
Copyright © 2011-2022 走看看