国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設計 > 正文

堆排序

2019-11-08 02:57:30
字體:
來源:轉載
供稿:網友

堆的定義:

n個關鍵字序列Kl,K2,…,Kn稱為(Heap),當且僅當該序列滿足如下性質(簡稱為堆性質):(1) ki<=k(2i) 且 ki<=k(2i+1)(1≤i≤n/2),當然,這是小根堆,大根堆則換成>=號。k(i)相當于二叉樹的非葉子結點,K(2i)則是左子節(jié)點,k(2i+1)是右子節(jié)點。若將此序列所存儲的向量R[1..n]看做是一棵完全二叉樹的存儲結構,則堆實質上是滿足如下性質的完全二叉樹:樹中任一非葉子結點的關鍵字均不大于(或不小于)其左右孩子(若存在)結點的關鍵字。

/** * 調整堆 * @param array $arr	排序數(shù)組 * @param int $i    	待調節(jié)元素的下標 * @param int $size 	數(shù)組大小, 準確來說是數(shù)組最大索引值加1 */function heapAjust(& $arr, $i, $size){	$key = $arr[$i];	// 索引從0開始	// 左孩子節(jié)點為 2i+1, 右孩子節(jié)點為 2i+2	for($j = 2 * $i + 1; $j < $size; $j = 2 * $j + 1) {		if($j + 1 < $size && $arr[$j] < $arr[$j + 1])			$j++;		if($key > $arr[$j])			break ;		$arr[$i] = $arr[$j]; //調換值		$i = $j;	}	$arr[$i] = $key;}/** * 堆排序 * 時間復雜度:O(nlogn) * 不穩(wěn)定的排序算法 */function heapSort(& $arr){	$len = count($arr);		// 構建初始大根堆	for($i = intval($len/2); $i >= 0; $i--) {		heapAjust($arr, $i, $len);	}	// 調換堆頂元素和最后一個元素	for($j = $len - 1; $j > 0; $j--) {		$swap = $arr[0];		$arr[0] = $arr[$j];		$arr[$j] = $swap;		heapAjust($arr, 0, $j); //繼續(xù)調整剩余元素為大根堆	}}


上一篇:codeup刷題

下一篇:vim配置過程

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 海兴县| 务川| 元阳县| 论坛| 台北市| 双柏县| 奉节县| 集安市| 同江市| 原阳县| 苍溪县| 云林县| 怀柔区| 广平县| 榕江县| 遂溪县| 黔江区| 交城县| 韩城市| 日照市| 马边| 陆河县| 敦化市| 紫阳县| 肃宁县| 平湖市| 永昌县| 兰考县| 靖远县| 晋城| 大石桥市| 长宁县| 简阳市| 仁怀市| 沙雅县| 和静县| 菏泽市| 苏尼特左旗| 通州市| 灯塔市| 元氏县|