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

首頁 > 學院 > 邏輯算法 > 正文

PHP實現堆排序算法(代碼示例)

2020-03-22 18:09:45
字體:
來源:轉載
供稿:網友
計算機科學中,heapsort(1964年由J. W. J. Williams發明)是一種基于比較的排序算法。Heapsort(堆排序)可以看作是一種改進的選擇排序:與該算法類似,它將輸入分為已排序區域和未排序區域,并通過提取最大的元素并將其移動到已排序區域來交互式地縮小未排序區域。改進包括使用堆數據結構,而不是線性時間搜索來找到最大值。

盡管在大多數機器上,它的實際運行速度比實現良好的快速排序要慢一些,但它的優勢是在最壞情況下O(n log n)運行時更有利。堆排序是一種就地排序算法,但它不是一種穩定排序。

heapsort算法對一組隨機排列的值進行排序。在算法的第一階段,數組元素被重新排序以滿足堆屬性。在進行實際排序之前,將簡要展示堆樹結構以供說明。

PHP堆排序算法思路示意圖:

Sorting_heapsort_anim.gif

PHP堆排序實現代碼如下:

 ?phphtml' target='_blank'>class Node private $_i; public function __construct($key) $this- _i = $key; public function getKey() return $this- class Heap private $heap_Array; private $_current_Size; public function __construct() $heap_Array = array(); $this- _current_Size = 0;
$this- heap_Array[0] = $this- heap_Array[--$this- _current_Size]; $this- bubbleDown(0); return $root;
if ($rightChild $this- _current_Size $this- heap_Array[$leftChild] $this- heap_Array[$rightChild]) $larger_Child = $rightChild; } else { $larger_Child = $leftChild; if ($top- getKey() = $this- heap_Array[$larger_Child]- getKey()) { break;
for ($j = 0; $j sizeof($this- heap_Array); $j++) { $arr[] = $this- heap_Array[$j]- getKey(); return $arr;function heapsort(Heap $Heap) $size = $Heap- getSize(); for ($j = (int)($size/2) - 1; $j $j--) $Heap- bubbleDown($j); for ($j = $size-1; $j $j--) { $BiggestNode = $Heap- remove(); $Heap- insertAt($j, $BiggestNode); return $Heap- asArray();$arr = array(3, 0, 2, 5, -1, 4, 1);echo 原始數組 : echo implode( , ,$arr );$Heap = new Heap();foreach ($arr as $key = $val) { $Node = new Node($val); $Heap- insertAt($key, $Node); $Heap- incrementSize();$result = heapsort($Heap);echo /n排序后數組 : echo implode( , ,$result). /n

輸出:

原始數組 : 3, 0, 2, 5, -1, 4, 1 排序后數組 : -1, 0, 1, 2, 3, 4, 5

本篇文章就是關于PHP堆排序的介紹,希望對需要的朋友有所幫助!

以上就是PHP實現堆排序算法(代碼示例)的詳細內容,PHP教程

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 普宁市| 江津市| 江永县| 南召县| 丰镇市| 大姚县| 泌阳县| 达拉特旗| 苍溪县| 康保县| 安平县| 包头市| 射洪县| 嘉禾县| 古浪县| 南溪县| 姜堰市| 广河县| 常德市| 德安县| 且末县| 团风县| 油尖旺区| 铁力市| 合川市| 曲水县| 介休市| 慈利县| 离岛区| 梨树县| 云南省| 丹巴县| 化德县| 永福县| 太和县| 米林县| 万全县| 长子县| 庆安县| 营口市| 伊金霍洛旗|