zoukankan      html  css  js  c++  java
  • HeapSort快速排序

    1.概念:

    :(二叉)堆数据结构是一种数组对象。它可以被视为一棵完全二叉树,树中每个结点与数组中存放该结点值的那个元素对应。

    二叉堆有两种:最大堆和最小堆(小根堆)。

    最大堆:所有节点的子节点比其自身小的堆。
    最小堆:所有节点的子节点比其自身大的堆。

    堆排序:堆排序利用了大根堆(或小根堆)堆顶记录的关键字最大(或最小)这一特征,使得在当前无序区中选取最大(或最小)关键字的记录变得简单

    2.代码

    package Sort;
    
    import java.util.Scanner;
    
    public class HeapSort {
        
        /**
         * build a max heap 
         * @param a 
         * @param size
         */
        public static void buildMaxHeap(int a[], int size) {
            for(int i = size/2; i > 0; i--) {
                maxHeapify(a, i, size);
            }
        }
        
        public static void maxHeapify(int a[], int i, int size) {
            int leftNode = 2 * i;
            int rightNode = 2 * i + 1;
            int largestNode = i;
            if(leftNode <= size && a[leftNode] > a[i]) {
                largestNode = leftNode;
            }
            if(rightNode <= size && a[rightNode] > a[largestNode]) {
                largestNode = rightNode;
            }
            if(largestNode != i) {
                int temp = a[i];
                a[i] = a[largestNode];
                a[largestNode] = temp;
                maxHeapify(a, largestNode, size);
            }
        }
        
        /**
         * print the current array
         * @param a
         * @param size
         */
        public static void printArray(int a[], int size) {
            for(int i = 1; i <= size; i++) {
                System.out.print(a[i] + " ");
            }
            System.out.println("");
        }
        
    
        public static void heapSort(int a[], int size) {
            buildMaxHeap(a, size);
            printArray(a, size);
            
            int len = size;
            for(int i = size; i >= 2; i--) {
                int temp = a[i];
                a[i] = a[1];
                a[1] = temp;
                len--;
                maxHeapify(a, 1, len);
                System.out.println("The intermediate result: ");
                printArray(a, size);
            }
        }
        
        public static void main(String args[]) {
            @SuppressWarnings("resource")
            Scanner scan = new Scanner(System.in);
            System.out.println("The size: ");
            int size = scan.nextInt();
            int a[] = new int[size+1];
            System.out.println("Input the elements: ");
            for(int i = 1 ; i <= size; i++) {
                a[i] = scan.nextInt();
            }
            heapSort(a, size);
            System.out.println("The final result: ");
            printArray(a, size);
        }
    }
  • 相关阅读:
    计算机组成原理_存储器
    常用CMD命令
    swiper及其父级隐藏之后轮播失效问题
    canvas生成海报
    移动端h5 实现多个音频播放
    vuex的一些学习
    关于H5的一些杂思细想(一)
    vue Error: No PostCSS Config found in
    vue路由传参的三种方式区别(params,query)
    vue-cli+mock.js+axios模拟前后台数据交互
  • 原文地址:https://www.cnblogs.com/SherryIsMe/p/3517374.html
Copyright © 2011-2022 走看看