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

    本文借鉴与 一线码农 的博客

       

       

       

       

    package com.ufida.practice.suanfa.sort;
    
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Random;
    
    public class HeapAdjust {
    
        public static void main(String[] args) {
            List<Integer> list = new ArrayList();
            for (int i = 0; i < 20000; i++)
                list.add(new Random().nextInt(100000));
            HeapSort(list);
            for (int j = 0; j < list.size(); j++)
                System.out.println(list.get(j));
        }
    
        public static void HeapAdjust(List<Integer> list, int parent, int length) {
            
            int temp = list.get(parent);// temp保存当前父节点
            int child = 2 * parent + 1;// 得到左孩子
            while (child < length) {
                // 如果parent有右孩子,则要判断左孩子是否小于右孩子
                if (child + 1 < length && list.get(child) < list.get(child + 1))
                    child++;
    
                // 父亲节点大于子节点,就不用做交换
                if (temp >= list.get(child))
                    break;
    
                // 将较大子节点的值赋给父亲节点
                list.set(parent, list.get(child));
    
                // 然后将子节点做为父亲节点,已防止是否破坏根堆时重新构造
                parent = child;
    
                // 找到该父亲节点较小的左孩子节点
                child = 2 * parent + 1;
            }
            // 最后将temp值赋给较大的子节点,以形成两值交换
            list.set(parent, temp);
        }
    
        public static void HeapSort(List<Integer> list) {
            // list.Count/2-1:就是堆中父节点的个数
            for (int i = list.size() / 2 - 1; i >= 0; i--) {
                HeapAdjust(list, i, list.size());
            }
    
            // 最后输出堆元素
            for (int i = list.size() - 1; i > 0; i--) {
                // 堆顶与当前堆的第i个元素进行值对调
                int temp = list.get(0);
                list.set(0, i);
                list.set(i, temp);
    
                // 因为两值交换,可能破坏根堆,所以必须重新构造
                HeapAdjust(list, 0, i);
            }
        }
    }
    因为年轻,所有没有失败。
  • 相关阅读:
    js插件zClip实现复制到剪贴板功能
    基于jQuery的滚动条插件-jquery.jscrollbar
    jquery mobile 开启开关
    html5 中audio 在safari上不支持自动播放
    开发人员常用的10个Sublime Text插件
    通过padding-bottom或者padding-top实现等比缩放响应式图片
    get请求下载json文件正常,但是不弹出status
    JSON错误
    对象与类
    数组(二)
  • 原文地址:https://www.cnblogs.com/wangchy0927/p/2846107.html
Copyright © 2011-2022 走看看