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);
        }
    }
  • 相关阅读:
    第一章 Java入门
    2020-2021-2 网络对抗技术 20181321 Exp 8 Web基础
    2020-2021-2 网络对抗技术 20181321 Exp7 网络欺诈防范
    2020-2021-2 网络对抗技术 20181321 Exp6 MSF基础应用
    Weblogic漏洞复现:CVE-2020-14882未授权代码执行
    利用cse-2020-16127,cve-2020-16125进行漏洞再现
    实验一-密码引擎-加密API实现与测试
    实验一-密码引擎-加密API研究
    API标准
    020-2021-2 网络对抗技术 20181321 Exp5 信息搜集与漏洞扫描
  • 原文地址:https://www.cnblogs.com/SherryIsMe/p/3517374.html
Copyright © 2011-2022 走看看