演算法 排序 堆與堆排序

2021-10-06 14:24:54 字數 1085 閱讀 5834

一、用陣列表示堆

堆其實是一棵完全二叉樹,那麼用陣列表示如下:

二、大根堆

在完全二叉樹中任何一棵子樹的最大值都在根部

建立大根堆

public void creat(int arr)

}public static void heapinsert(int arr, int index)

}

整理大根堆

public static void heapify(int arr, int index, int size) 

swap(arr, largest, index);

index = largest;

left = index * 2 + 1;

}}

三、小根堆與大根堆相似

四、堆排序

演算法 堆排序(堆)

使用情形 插入乙個數 求集合當中的最小值 刪除最小值 刪除任意乙個元素 修改任意乙個元素 用一維陣列儲存二叉樹,左兒子在陣列中為根節點在陣列中的位置的2倍,右兒子在陣列中為根節點在陣列中的位置的二倍加一。求當前堆的最小值 void down int u 輸入乙個長度為n的整數數列,從小到大輸出前m小...

堆與堆排序

二叉堆是完全二叉樹或者是近似完全二叉樹。二叉堆滿足二個特性 1 父結點的鍵值總是大於或等於 小於或等於 任何乙個子節點的鍵值。2 每個結點的左子樹和右子樹都是乙個二叉堆 都是最大堆或最小堆 當父結點的鍵值總是大於或等於任何乙個子節點的鍵值時為最大堆。當父結點的鍵值總是小於或等於任何乙個子節點的鍵值時...

堆與堆排序

堆排序與快速排序,歸併排序一樣都是時間複雜度為o n logn 的幾種常見排序方法。堆排序是就地排序,輔助空間為o 1 它是不穩定的排序方法。排序的穩定性是指如果在排序的序列中,存在前後相同的兩個元素的話,排序前 和排序後他們的相對位置不發生變化 先說說什麼是堆,堆通常是乙個可以被看做一棵樹的陣列物...