function insertSort(&$arr, $numb = 1) { if ($numb < count($arr)) { for ($i = $numb - 1; $i >= 0; $i--) { if ($arr[$i] > $arr[$i + 1]) { $item = $arr[$i]; $arr[$i] = $arr[$i + 1]; $arr[$i + 1] = $item; } } insertSort($arr, $numb + 1); } }
* 插入排序 * @param $arr * @return array */ function insertSort($arr) { $num = count($arr); if ($num <= 1) { return $arr; } for ($i = 1; $i < $num; $i++) { $x = $arr[$i]; $j = $i - 1; while ($j >= 0 && $x < $arr[$j]) { $arr[$j + 1] = $arr[$j]; $j--; } $arr[$j + 1] = $x; } return $arr; } // 测试代码 $arr = range(1, 10000); shuffle($arr); echo '<hr>'; $start = microtime(true); $res = insertSort($arr); echo number_format((microtime(true) - $start) * 1000); echo '<pre>'; print_r($res); exit;
<?php //插入排序法 $arr = array(8, 63, 23, 4, 19, 2); function insertSort(&$arr) { //先默认下标为0这个数已经有序 for ($i = 1; $i < count($arr); $i++) { //$insertVal是准备插入的数 $insertVal = $arr[$i]; //插入的数准备先和下标为$insertIndex比较 $insertIndex = $i - 1; while ($insertIndex >= 0 && $insertVal < $arr[$insertIndex]) { //同时把数往后移一个位置 $arr[$insertIndex + 1] = $arr[$insertIndex]; $insertIndex--; } //插入(这是就给$insertVal找到适当位置) $arr[$insertIndex + 1] = $insertVal; } } insertSort($arr); print_r($arr);
function testArrayData() { $aData = ''; $aData = array(3, 2, 4, 1, 6, 0); responseArray($aData, '原来顺序'); responseArray(selectSort($aData), '选择排序'); responseArray(quickSort($aData), '快速排序'); responseArray(insertSort($aData), '插入排序'); responseArray(bubbleSort($aData), '冒泡排序'); responseArray(reQuickSort($aData), '反序排序'); echo '<b>最 大 值:</b>' . $GLOBALS['PHPMax']($aData) . '<hr>'; echo '<b>最 小 值:</b>' . $GLOBALS['PHPMin']($aData) . '<hr>'; }
array_push($randArr, $num); } return $randArr; } function insertSort($arr) { for ($i = 0; $i < count($arr); $i++) { $temp = $arr[$i]; $tempIndex = $i; for ($j = $i; $j > 0; $j--) { if ($temp < $arr[$j - 1]) { $arr[$j] = $arr[$j - 1]; $tempIndex = $j - 1; } } $arr[$tempIndex] = $temp; } return $arr; } function microtime_float() { list($usec, $sec) = explode(" ", microtime()); return (double) $usec + (double) $sec; } $myArray = createArray(); $time_start = microtime_float(); $sortArr = insertSort($myArray); $time_end = microtime_float(); $time = $time_end - $time_start; echo "Insert Sort in " . $time . "seconds"; var_dump($sortArr);
function shellSort(array $arr) { $k = initStep(count($arr)); $step = pow(2, $k) - 1; #根据步长进行多次插入排序,依次减少步长, for (; $step >= 1; $step = pow(2, --$k) - 1) { $arr = insertSort($arr, $step); } return $arr; }
<?php $list = [5, 4, 1, 7, 9, 2, 0, 3, 6, 8]; function insertSort(&$list) { $length = count($list); for ($i = 0; $i < $length; $i++) { $current = $i; $next = $i + 1; while (array_key_exists($next, $list) && $list[$next] < $list[$current]) { $tmp = $list[$next]; $list[$next] = $list[$current]; $list[$current] = $tmp; $current--; $next--; } } } insertSort($list);