日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

堆排序(利用最大堆)

發布時間:2024/8/22 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 堆排序(利用最大堆) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
  • package heap; ??
  • ??
  • import java.math.BigInteger; ??
  • ??
  • /**
  • * 最大堆最小堆性質:
  • * 完全二叉樹
  • * left=2i;
  • * right=2i+1;
  • * 最大堆:除根節點外,子節點<父節點
  • * 最小堆:除根節點外,子節點>父節點
  • * 堆排序算法復雜度:o(n*lgn)
  • *
  • * @author B.Chen
  • *
  • */??
  • public class MaxHeap { ??
  • ??
  • ????public int heapSize; ??
  • ??
  • ????public int parent(int i) { ??
  • ????????return i / 2; ??
  • ???? } ??
  • ??
  • ????public int left(int i) { ??
  • ????????return 2 * i; ??
  • ???? } ??
  • ??
  • ????public int right(int i) { ??
  • ????????return 2 * i + 1; ??
  • ???? } ??
  • ??
  • ????public void maxHeapify(int[] a, int i) { ??
  • ????????int l = left(i); ??
  • ????????int r = right(i); ??
  • ????????int largest = i; ??
  • ????????if (l < heapSize) { ??
  • ????????????if (a[l] > a[i]) { ??
  • ???????????????? largest = l; ??
  • ???????????? } ??
  • ???????? } ??
  • ????????if (r < heapSize) { ??
  • ????????????if (a[r] > a[largest]) { ??
  • ???????????????? largest = r; ??
  • ???????????? } ??
  • ???????? } ??
  • ????????if (largest != i) { ??
  • ????????????int temp = a[i]; ??
  • ???????????? a[i] = a[largest]; ??
  • ???????????? a[largest] = temp; ??
  • ???????????? maxHeapify(a, largest); ??
  • ???????? } ??
  • ???? } ??
  • ??
  • ????public void builtMaxHeap(int[] a) { ??
  • ???????? heapSize = a.length; ??
  • ????????for (int i = (a.length - 1) / 2; i >= 0; i--) { ??
  • ???????????? maxHeapify(a, i); ??
  • ???????? } ??
  • ???? } ??
  • ??
  • ????public void heapSort(int[] a) { ??
  • ???????? builtMaxHeap(a); ??
  • ????????for (int i = a.length - 1; i > 0; i--) { ??
  • ????????????int temp = a[0]; ??
  • ???????????? a[0] = a[i]; ??
  • ???????????? a[i] = temp; ??
  • ???????????? heapSize = heapSize - 1; ??
  • ???????????? maxHeapify(a, 0); ??
  • ???????? } ??
  • ???? } ??
  • ??
  • ????public static void main(String[] args) { ??
  • ???????? MaxHeap mh = new MaxHeap(); ??
  • ????????int[] a = new int[] { 7, 6, 4, 2, 8, 3, 1, 5, 9, 0 }; ??
  • ???????? mh.heapSort(a); ??
  • ????????for (int i = 0; i < a.length; i++) { ??
  • ???????????? System.out.print(a[i] + " "); ??
  • ???????? } ??
  • ???? } ??
  • ??
  • }??
  • 其中2×i可以用二進制表示成i<<1
    2×i+1可以表示成(i<<1)+1
  • 轉載于:https://www.cnblogs.com/xinzhuangzi/archive/2010/05/16/4100618.html

    總結

    以上是生活随笔為你收集整理的堆排序(利用最大堆)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。