zoukankan      html  css  js  c++  java
  • 堆排序

    package com.hzins.suanfa;
    
    import java.util.Arrays;
    
    /**
     * 堆排序
     * 思路,建立最大堆并把最大的数移到最后,从第一行到倒数第二行建立最大堆
     * 建立最大堆:
     * for循环 以lastindex的父节点为起始位,每此循环自减,直到为1
     * 对于每个父节点肯定会有左子树(要不然他就不是父节点了) 判断有没有右字数
     * 拿到这两个位置的最大值,然后与父节点做比较,最大的放在父节点上,依次循环
     * 树顶判断完毕
     * @author Administrator
     *
     */
    public class HeapSort {
        public static void heapSort(int[] data){
            for(int i = data.length - 1;i >= 1; i--){
                createMaxHeap(data, i);
                swap(data, i, 0);
                
            }
        }
        /**
         * 参数lastIndex是用来做出父节点的,如果lastIndex为0的话
         * (lastIndex - 1) / 2算出的父节点为负,越界了,所以lastIndex最小为1
         * @param data
         * @param lastIndex
         */
        public static void createMaxHeap(int[] data, int lastIndex){
            for(int i = (lastIndex - 1) / 2; i >= 0; i --){
                //父节点
                int k = i;
                int bigger = k * 2 + 1; // 定义最大为左孩子
                //有rightChildren
                if(k * 2 + 2 <= lastIndex){
                    bigger = data[bigger] > data[k * 2 + 2] ? bigger : bigger + 1;
                }
                if(data[k] < data[bigger]){
                    swap(data, k, bigger);
                }
            }
        }
        public static void swap(int[] array, int a, int b){
            int temp = array[a];
            array[a] = array[b];
            array[b] = temp;
            
        }
        //start 6, 4, 7, 3, 3, 1, 8
        public static void main(String[] args) {
            int[] array = {6, 4, 7, 3, 3, 1, 8};
            heapSort(array);
    //        createMaxHeap(array, 0);
            System.out.println(Arrays.toString(array));
        }
    }
  • 相关阅读:
    java中取两位小数 但不要四舍五入
    从字符串中提取数字 java正则表达式
    SQL实现 列转行(MySQL中)
    sql如何根据时间取出最新的数据记录
    动画 很精辟的
    week 与 strong区别 精辟的解释
    The executable was signed with invalid entitlements新设备run出现这个问题
    在iOS中创建静态库
    网址
    nginx单机1w并发设置
  • 原文地址:https://www.cnblogs.com/caobojia/p/6771384.html
Copyright © 2011-2022 走看看