排序之三 堆排序 可列印排序流程

2021-09-01 11:49:02 字數 1572 閱讀 9542

public class heapsort 

public static heapsort getinstance()}}

return sinstance;

}/**

* 堆排序演算法入口

* @param arr 建議使用個位數陣列測試方便直觀觀察排序過程

* 0

* 3 4

*2 5 6 1

* @return 排序後陣列

*/public int heapsort(int arr)

//然後交換

for (int j = length - 1;j>=0;j--)

printheap(arr);

return arr;

}/**

* 交換陣列任意兩個索引的值

* @param arr

* @param i

* @param j

*/public void swap(int arr, int i, int j)

public void adjustheap(int arr,int i,int length)

//如果 父節點小於子節點 交換 同時父節點變成了原來較大

// 的子節點,繼續向下比較,將較小的值沉下去

swap(arr,i,k);

i = k;

printheap(arr);}}

/*public void adjustheap(int arr,int i,int length)else

}arr[i] = temp;//將temp值放到最終的位置

printheap(arr);

}*//**

** @param length

* @return 任意陣列以堆的形式展開後的層級數

*/public static int count(int length)

//除法

/*int i = 1;

while (n >= 2)

return i;*/

//乘法

int i = 1;

int count = i;

while (count < length)

return i;

}/**

* 將陣列以堆的形式列印出來,方便學習

* @param arr

*/public void printheap(int arr)

//列印時層級為i首個元素的偏移

int offset = max >> (i+1);

//層級為i時元素之間的間隔

int interval = max >> i;

//對於非葉子層級(不是最後一層),首層元素索引k,每層個數等於k+1,而對最後一層,個數為length-k;

int count = (k < level-1) ? k+1 : (length - k);

for(int j = k;j < (k+count);j++)

system.out.println(sb.tostring());}}

}

選擇排序(三) 堆排序

這樣,還剩下兩個問題 1.如何將乙個交換後的無序區調整為大根堆 2.如何在排序之前建立那個初始的大根堆。而第二個問題是可以通過第乙個問題的解決而解決的。1.如何將乙個交換後的無序區調整為大根堆?由於進行元素交換前,無序區是乙個大根堆,即左子樹和右子樹都是大根堆,所以根節點變化後左右子樹仍然都是大根堆...

排序演算法 三 堆排序

1.heap.class package cn.sort.heap 堆排序實現 公升序排序 author ly public class heap system.out.println 向下調整 先拿左右子樹進行比較,看誰比較大,然後再拿大的與父結點進行比較,若孩子結點比較大,則大孩子與父結點交換,...

選擇排序(三) 堆排序

這樣,還剩下兩個問題 1.如何將乙個交換後的無序區調整為大根堆 2.如何在排序之前建立那個初始的大根堆。而第二個問題是可以通過第乙個問題的解決而解決的。1.如何將乙個交換後的無序區調整為大根堆?由於進行元素交換前,無序區是乙個大根堆,即左子樹和右子樹都是大根堆,所以根節點變化後左右子樹仍然都是大根堆...