冒泡排序、快速排序这种基本知识还是要记得。
冒泡排序:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<?php function bubble($arr) { $count = count($arr); for ($i = $count - 1; $i > 0; $i--) { for ($j = 0; $j < $i; $j++) { if ($arr[$j] > $arr[$j+1]) { $arr[$j] = $arr[$j] + $arr[$j+1]; $arr[$j+1] = $arr[$j] - $arr[$j+1]; $arr[$j] = $arr[$j] - $arr[$j+1]; } } } return $arr; } |
快速排序:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
<?php function quicksort($arr) { if (count($arr) > 1) { $k = $arr[0]; $a = array(); $b = array(); $count = count($arr); for ($i = 1; $i < $count; $i++) { if ($arr[$i] <= $k) { $a[] = $arr[$i]; } else { $b[] = $arr[$i]; } } $a = quicksort($a); $b = quicksort($b); return array_merge($a, array($k), $b); } else { return $arr; } } |
二分法查找$b在递增数组$arr中的位置:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<?php function a($arr, $search) { $start = 0; $end = count($arr) - 1; while ($start <= $end) { $center = intval(($start + $end) / 2); if ($arr[$center] == $search) { return $center; } elseif ($arr[$center] > $search) { $end = $center - 1; } else { $start = $center + 1; } } return -1; } |