摘要:的陣列視為基本型別,所以必須用傳參考才能修改原陣列插入排序快速排序歸并排序堆排序獲取個(gè)數(shù)處理一半的數(shù)據(jù)
function bubble_sort(&$arr) {//php的陣列視為基本型別,所以必須用傳參考才能修改原陣列 for ($i = 0; $i < count($arr) - 1; $i++) for ($j = 0; $j < count($arr) - 1 - $i; $j++) if ($arr[$j] > $arr[$j + 1]){ $temp = $arr[$j]; $arr[$j] = $arr[$j+1]; $arr[$j+1] = $temp; } }
插入排序
public function insertSort(&$arr){ for($i = 1;$i < count($arr); $i++){ $temp = $arr[$i]; for($j = $i - 1;$j >= 0 && $arr[$j] > $temp; $j--) $arr[$j + 1] = $arr[$j]; $arr[$j] = $temp; } }
快速排序
public function quickSort($arr){ $len = count($arr); if($len <= 1) return $arr; $left = $right = []; $mid_index = $len>>1;echo $len,".....",$mid_index,"
"; $mid_value = $arr[$mid_index]; for($i = 0;$i < $len;$i++){ if($i == $mid_index) continue; if($arr[$i] < $mid_value) $left[] = $arr[$i]; else $right[] = $arr[$i]; } return array_merge($this->quickSort($left),(array)$mid_value,$this->quickSort($right)); }
歸并排序
public function merge_sort($arr){ $len = count($arr); if($len <= 1) return $arr; $half = ($len >> 1) + ($len & 1);dd(($len >> 1)); $arr2d = array_chunk($arr,$half); $left = $this->merge_sort($arr2d[0]); $right = $this->merge_sort($arr2d[1]); while(count($left) && count($right)){ if($left[0] < $right[0]) $reg[] = array_shift($left); else $reg[] = array_shift($right); } return array_merge($reg,$left,$right); }
堆排序
public function swap(&$x,&$y){ $t = $x; $x = $y; $y = $t; } public function max_heapify(&$arr,$start,$end){ $dad = $start; $son = $dad*2+1; if($son >=$end) return; if($son + 1 < $end && $arr[$son] < $arr[$son + 1]) $son++; if($arr[$dad] < $arr[$son]){ $this->swap($arr[$dad],$arr[$son]); $this->max_heapify($arr,$son,$end); } }
public function heap_sort($arr){ $len = count($arr);//獲取個(gè)數(shù) for($i = ceil($len/2) - 1;$i >= 0;$i--){//處理一半的數(shù)據(jù) $this->max_heapify($arr,$i,$len); } for($i= $len-1;$i > 0;$i--){ $this->swap($arr[0],$arr[$i]); $this->max_heapify($arr,0,$i); } return $arr; }
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/28915.html
摘要:是穩(wěn)定的排序方法。也稱(chēng)縮小增量排序,是直接插入排序算法的一種更高效的改進(jìn)版本。希爾排序是非穩(wěn)定排序算法。算法實(shí)現(xiàn)選擇排序堆排序描述堆排序是指利用堆積樹(shù)堆這種數(shù)據(jù)結(jié)構(gòu)所設(shè)計(jì)的一種排序算法,它是選擇排序的一種。 1、插入排序 描述 插入排序的基本操作就是將一個(gè)數(shù)據(jù)插入到已經(jīng)排好序的有序數(shù)據(jù)中,從而得到一個(gè)新的、個(gè)數(shù)加一的有序數(shù)據(jù),算法適用于少量數(shù)據(jù)的排序,時(shí)間復(fù)雜度為O(n^2)。是穩(wěn)定...
摘要:前面介紹了七大算法的思想與實(shí)現(xiàn)步驟,下面來(lái)做一個(gè)歸總。直到無(wú)序區(qū)中的數(shù)為零,結(jié)束排序。步驟以從小到大為例,排序數(shù)組大小為。比較完以后則排序結(jié)束。堆排序思想堆排序是采用樹(shù)的形式的數(shù)據(jù)結(jié)構(gòu)來(lái)進(jìn)行排序的,其中每一個(gè)堆都是完全二叉樹(shù)。 前面介紹了七大算法的思想與實(shí)現(xiàn)步驟,下面來(lái)做一個(gè)歸總。 排序方法 平均復(fù)雜度 最壞復(fù)雜度 最好復(fù)雜度 輔助空間 穩(wěn)定性 直接選擇排序 O(n^2...
摘要:之所以把歸并排序快速排序希爾排序堆排序放在一起比較,是因?yàn)樗鼈兊钠骄鶗r(shí)間復(fù)雜度都為。歸并排序是一種穩(wěn)定的排序方法。因此,快速排序并不穩(wěn)定。希爾排序思想先將整個(gè)待排序的記錄序列分割成為若干子序列。 showImg(https://segmentfault.com/img/bVbvpYZ?w=900&h=250); 1. 前言 算法為王。 想學(xué)好前端,先練好內(nèi)功,只有內(nèi)功深厚者,前端之路才...
閱讀 1240·2021-11-25 09:43
閱讀 1349·2021-09-26 09:55
閱讀 2410·2021-09-10 11:20
閱讀 3378·2019-08-30 15:55
閱讀 1454·2019-08-29 13:58
閱讀 1180·2019-08-29 12:36
閱讀 2353·2019-08-29 11:18
閱讀 3418·2019-08-26 11:47