您好,登錄后才能下訂單哦!
本帖為了快速牢靠的記住四種排序。
冒泡排序
冒泡排序的時間復雜度是O(n^2);
外層控制趟數,并且跟內層排序個數相關。
$arr = [1,5,4,9,11]; $n = count($arr); $max = $n - 1; for($i = 0; $i < $max; $i++){ for($j = 0; $j < $max - $i; $j++){ if($arr[$j] > $arr[$j+1]){ $t = $arr[$j]; $arr[$j] = $arr[$j+1]; $arr[$j+1] = $t; } } } var_dump($arr);
選擇排序
選擇排序的時間復雜度是O(n^2);
$arr = [1,5,4,9,11]; $n = count($arr) - 1; for($i = 0; $i<$n; $i++){ $t = $i; for($j = $i+1; $j<$n + 1; $j++){ if($arr[$t] > $arr[$j]){ $t = $j; } } if($i != $t){ $tmp = $arr[$i]; $arr[$i] = $arr[$t]; $arr[$t] = $tmp; } } var_dump($arr);
快速排序
快速排序的時間復雜度是O(nlog2^n);
$arr = [16, 2, 5, 6,19, 8, 10 , 30]; function po(&$arr, $left, $right){ $key = $arr[$left]; while($left < $right){ while($left < $right && $arr[$right] >= $key){ $right--; } if($left < $right){ $arr[$left++] = $arr[$right]; } while($left < $right && $arr[$left] <= $key){ $left++; } if($left < $right){ $arr[$right--] = $arr[$left]; } } $arr[$left] = $key; return $left; } function qs(&$arr, $left, $right){ if($left >= $right){ return ; } $i = po($arr, $left, $right); qs($arr, $left, $i-1); qs($arr, $i+1, $right); } qs($arr, 0, 7); var_dump($arr);
歸并排序
歸并排序的時間復雜度O(nlog2^n);
$arr = [9, 7, 11, 3, 5, 8, 39, 4]; function gui($arr){ $n = count($arr); if($n <= 1){ return $arr; } $mid = intval($n/2); $left = array_slice($arr, 0, $mid); $right = array_slice($arr, $mid); $left = gui($left); $right = gui($right); $all = bin($left, $right); return $all; } function bin($left, $right){ $arrC = array(); while(count($left) && count($right)){ $arrC[] = $left['0'] < $right['0'] ? array_shift($left) : array_shift($right); } return array_merge($arrC, $left, $right); } var_dump(gui($arr));
其中,快速排序和歸并排序都用到了遞歸,所以時間復雜度減少,但難度增大很多。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。