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

    堆排序

    将待排序序列构造成一个大顶堆,此时,整个序列的最大值就是堆顶的根节点。将其与末尾元素进行交换,此时末尾就为最大值。然后将剩余n-1个元素重新构造成一个堆,这样会得到n个元素的次小值。如此反复执行,便得到一个有序序列。


    public void sort(int[] arr) {
            int n = (arr.length - 1) / 2;
            for (int i = n; i >= 0; i--) {
                maxHeap(arr, i, arr.length - 1);
            }
            for (int i = arr.length - 1; i >= 0; i--) {
                //swap(arr, 0, i);
                int tmp = arr[0];
                arr[0]=arr[i];
                arr[i]=tmp;
                maxHeap(arr, 0, i);
            }
        }
    
        private void maxHeap(int[] arr, int i, int count) {
    
            int j = 2 * i + 1;
            int tmp = arr[i];
            while (j < count) {
                if (j + 1 < count && arr[j] < arr[j + 1]) {
                    j++;
                }
                if (arr[j] <= tmp) {
                    break;
                }
                arr[i] = arr[j];
                i = j;
                j = 2 * i + 1;
            }
            arr[i] = tmp;
        }
  • 相关阅读:
    LTE
    LTE
    LTE
    LTE
    LTE DL-SCH and PDSCH Processing Chain
    LTE PDSCH Port 5 UE-Specific Beamforming
    推荐我的公众号
    GitHub Top 微信小程序
    深度前馈网络
    考研经历吐血总结
  • 原文地址:https://www.cnblogs.com/kpwong/p/14651096.html
Copyright © 2011-2022 走看看