摘要:冒泡排序對于一個長度為的數組,我們需要排序輪,每輪要比較次。對此我們可以用雙重循環語句,外層循環控制循環輪次,內層循環控制每輪的比較次數。將這個元素插入到已經排序好的序列內。
冒泡排序
對于一個長度為N的數組,我們需要排序 N-1 輪,每 i 輪 要比較 N-i 次。對此我們可以用雙重循環語句,外層循環控制循環輪次,內層循環控制每輪的比較次數。
$arr = [2,3,1,8,4,5]; $length = count($arr); for ($i=0;$i<$length;$i++) { for ($j=0;$j<$i-1;$j++) { if ($arr[$i] > $arr[$j]) { $tmp = $arr[$j]; $arr[$j] = $arr[$i]; $arr[$i] = $tmp; } } } for ($i=0;$i<$length-1;$i++) { echo "i:" . $i . " "; for ($j=0;$j<$length-1-$i;$j++) { echo "j:" .$j . " "; if ($arr[$j] > $arr[$j+1]) { $tmp = $arr[$j]; $arr[$j] = $arr[$j+1]; $arr[$j+1] = $tmp; print_r($arr); } } echo " "; } print_r($arr);選擇排序
每一輪比較都可以確定一個位置,對于N個數,比較N-1輪可以確定N個位置上的數,因為確定了N-1個位置,最后一個位置也就確定了
for($i=0; $i<$count-1; $i++){ //定義最小位置 $minIndex = $i; for($j= $i+1; $j<$count; $j++){ if($arr[$j] < $arr[$minIndex]){ $minIndex = $j; } } if($i != $minIndex){ $temp = $arr[$i]; $arr[$i] = $arr[$minIndex]; $arr[$minIndex] = $temp; } }快速排序
1、先從數列中取出一個數作為基準數2、分區過程,將比這個數大的數全放到它的右邊,小于或等于它的數全放到它的左邊
3、再對左右區間重復第二步,直到各區間只有一個數
function quick_sort($arr) { if (empty($arr)) { return $arr; } $length = count($arr); if ($length == 1) { return $arr; } // 將第一個值設置為基準值 $base = $arr[0]; $left = $right = []; for($i = 1; $i < $length; $i++) { if ($base < $arr[$i]) { $left[] = $arr[$i]; } else { $right[] = $arr[$i]; } } // 遞歸調用 $left = quick_sort($left); $right = quick_sort($right); return array_merge($left, [$base], $right); }插入排序
對于插入排序,我的理解是 兩層循環下 逐漸增加排序的數量,不斷的重復比較直到得到最終的排序結果,跟我最初的比較排序思路基本是一致的
function insert_sort($arr) { //區分 哪部分是已經排序好的 //哪部分是沒有排序的 //找到其中一個需要排序的元素 //這個元素 就是從第二個元素開始,到最后一個元素都是這個需要排序的元素 //利用循環就可以標志出來 //i循環控制 每次需要插入的元素,一旦需要插入的元素控制好了, //間接已經將數組分成了2部分,下標小于當前的(左邊的),是排序好的序列 for($i=1, $len=count($arr); $i<$len; $i++) { //獲得當前需要比較的元素值。 $tmp = $arr[$i]; //內層循環控制 比較 并 插入 for($j=$i-1;$j>=0;$j--) { //$arr[$i];//需要插入的元素; $arr[$j];//需要比較的元素 if($tmp < $arr[$j]) { //發現插入的元素要小,交換位置 //將后邊的元素與前面的元素互換 $arr[$j+1] = $arr[$j]; //將前面的數設置為 當前需要交換的數 $arr[$j] = $tmp; } else { //如果碰到不需要移動的元素 //由于是已經排序好是數組,則前面的就不需要再次比較了。 break; } } } //將這個元素 插入到已經排序好的序列內。 //返回 return $arr; }
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/28449.html
摘要:本文將介紹快速排序計數排序梳排序堆排序歸并排序希爾排序選擇排序插入排序地精排序聯合冒泡排序雞尾酒排序冒泡排序奇偶排序使用標志的冒泡排序種排序算法的實現。是一種不穩定的排序算法。 本文將介紹快速排序、計數排序、梳排序、堆排序、歸并排序、希爾排序、選擇排序、插入排序、地精排序、聯合冒泡排序、雞尾酒排序、冒泡排序、奇偶排序、使用標志的冒泡排序14種排序算法的實現。本文是由于閱讀了文章《測試評...
摘要:數據項是數據的不可分割的最小單位。數據項是對客觀事物某一方面特性的數據描述。數據對象是性質相同的數據元素的集合,是數據的一個子集。數據的邏輯結構數據元素之間的相互關系稱為邏輯結構。 項目地址 https://github.com/m9rco/algo... 每周最少一更,求出題,求虐待 At least once a week, ask for problems and abuse 簡...
摘要:數據項是數據的不可分割的最小單位。數據項是對客觀事物某一方面特性的數據描述。數據對象是性質相同的數據元素的集合,是數據的一個子集。數據的邏輯結構數據元素之間的相互關系稱為邏輯結構。 項目地址 https://github.com/m9rco/algo... 每周最少一更,求出題,求虐待 At least once a week, ask for problems and abuse 簡...
摘要:數據項是數據的不可分割的最小單位。數據項是對客觀事物某一方面特性的數據描述。數據對象是性質相同的數據元素的集合,是數據的一個子集。數據的邏輯結構數據元素之間的相互關系稱為邏輯結構。 項目地址 https://github.com/m9rco/algo... 每周最少一更,求出題,求虐待 At least once a week, ask for problems and abuse 簡...
摘要:在算法中,比快速排序還快的,無疑是基數排序,粗略看了一下算法,可能是基礎排序中的桶排序。桶排序是穩定的桶排序是常見排序里最快的一種,比快排還要快大多數情況下桶排序非常快,但是同時也非常耗空間以空間換時間 ext/standard/php_array.h https://github.com/php/php-src/blob/master/ext/standard/php_array....
閱讀 1111·2021-09-22 16:04
閱讀 1494·2019-08-30 15:43
閱讀 1097·2019-08-29 14:01
閱讀 3438·2019-08-26 12:19
閱讀 3353·2019-08-26 12:15
閱讀 1444·2019-08-26 12:13
閱讀 3264·2019-08-23 17:00
閱讀 1484·2019-08-23 15:38