国产探花免费观看_亚洲丰满少妇自慰呻吟_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ā)表
主站蜘蛛池模板: 江油市| 南通市| 叙永县| 如皋市| 平凉市| 海原县| 莆田市| 定远县| 马关县| 义乌市| 雅安市| 陕西省| 保康县| 巫溪县| 湖南省| 司法| 喀喇| 平武县| 沭阳县| 阿拉尔市| 霞浦县| 长白| 扎兰屯市| 温泉县| 桃园市| 南丰县| 新闻| 平潭县| 元阳县| 渭源县| 康保县| 平湖市| 开平市| 微博| 鹤庆县| 临泽县| 渑池县| 太保市| 抚顺市| 拉萨市| 乡宁县|