public
class 小頂堆輸出
;sort
(arr)
;for
(int i=
0;iprivate
static
void
minheap
(int
arr)
}private
static
void
fixdown
(int
arr,
int i,
int n)
int min=left;
//如果右孩子越界,i就是葉子節點
if(right>=n)
else
}//如果a[i]比兩個孩子都要小,不用調整 3.考慮要不要換
if(arr[i]
<=arr[min]
)//否則,找到兩個孩子中較小的,和i交換 4.換
int temp=arr[i]
;//拷貝最小的值
arr[i]
=arr[min]
; arr[min]
=temp;
//小孩子的那個位置的值發生了變化,i變得更為小那個位置
fixdown
(arr,min,n);}
private
static
void
sort
(int arr)
//縮小堆的範圍,對堆頂元素進行向下調整
}public
static
int[
]swap
(int arr,
int sp,
int bigger)
}
topk 堆排序 小頂堆
問題描述 假設需要我們在一堆海量資料中找出排名前k的資料 最好的方法是用最小堆排序,直接用前k個資料建立乙個小頂堆,然後遍歷剩餘的數,如果此數 堆頂的數,則將此數和堆頂的數交換,然後從堆頂向下調整堆,使其重新滿足小頂堆。說明 堆的儲存 一般用陣列來表示堆,第i個節點的父節點下標為i 2 1 它的左右...
大頂堆 小頂堆 堆排序
堆的定義 n個元素的序列當且僅當滿足下列關係之一時,稱之為堆。大頂堆 k i k 2i 且k i k 2i 1。小頂堆 k i k 2i 且k i k 2i 1。堆序列可以理解成乙個完全二叉樹,該樹任意乙個結點的關鍵字的值都小於或等於它的孩子結點的關鍵字。例如 堆排序 若在輸出堆頂的最小值之後,使得...
排序演算法 堆排序(大頂堆 小頂堆)
堆排序的思想這裡就先不講了,以後有時間再補上,下面是分別採用大頂堆和小頂堆實現的堆排序。注意 下面例子中排序的數字是。大頂堆方式 include include using namespace std 堆調整 將nums s.m 調整為大頂堆,其中除了nums s 之外均滿足大頂堆的定義 void ...