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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

(一)选择排序之一:堆排序

發布時間:2025/3/15 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 (一)选择排序之一:堆排序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

選擇排序學過的有三種:簡單選擇排序、樹形選擇排序、堆排序

今天先來簡單的了解一下堆排序:

  完全二叉樹,即從頭到尾,從左到右依次排序,符合大堆(小堆)都行,即ki>=k2i && ki >= k2i+1
  ?由于此處使用的是數組,則最長為array.length-1,并且 ki>=k2i+1 && ki >= k2i+2

下面的例子是百度上搜的,便于理解

? ? ? ? ? ? ? ? ? ? ? ??

實例如下:

public class MyHeap {public static void main(String[] args) {int[] array = {49,38,65,97,76,13,27,49 };print(array);HeapSort(array);print(array);}public static int[] HeapSort(int[] array){int n = (array.length-1)/2;for (int i = n; i >= 0; i--) {MaxHeap(array,i);}return array;}/**判斷一個元素與其i*2+1(2)的關系*/public static int[] MaxHeap(int[] array,Integer i){int large = i;int index = 2*i+1;if(index< array.length && array[i]>array[index]){large = index;}index = 2*i +2;if(index< array.length && array[i]>array[index]){if( array[large]>array[index] ){large = index;}}if(large != i){int temp =array[i];array[i] = array[large];array[large] = temp;print(array);//每次交換順序有打印if(large <= array.length/2){MaxHeap(array,large);//交換后,如果大的一層有下層,則再次判斷大的一層是否符合}}return array;}/**打印數組*/public static void print(int[] array){for (int i = 0; i < array.length; i++) {System.out.print(array[i] + " ");}System.out.println();} }

  

轉載于:https://www.cnblogs.com/blogofcookie/p/5845586.html

總結

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

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