1. 程式人生 > >java排序演算法(七)------堆排序

java排序演算法(七)------堆排序

堆排序

在這裡插入圖片描述 在這裡插入圖片描述 程式碼實現:

public static void sort01(int[] arr) {
		for (int i = 0; i < arr.length; i++) {
			headAdust01(arr, arr.length - 1 - i);
			swap(arr, 0, arr.length - 1 - i);
		}
	}
	public static void headAdust01(int[] arr, int last) {
		for (int i = (last - 1) / 2; i >= 0; i--) { // 獲得最後一個葉節點的父節點,依次遞減遍歷父節點
int parent = i; // 判斷是否有左子節點 while (2 * parent + 1 <= last) { int biggest = 2 * parent + 1; // biggest指向最大節點,先初始化為左子節點 if (biggest < last) { // 判斷有右節點 if (arr[biggest] < arr[biggest + 1]) { biggest = biggest + 1; } } if (arr[parent] < arr[biggest]) { swap
(arr, parent, biggest); parent = biggest; } else { break; } } } }