php之插入排序

php之插入排序_第1张图片

1.直接插入排序代码实现:



header("content-type:text/html;charset=utf-8");

//直接插入排序实现从小到大排序
//思路:每一趟排序将待排序的记录(元素)插入到前面的有序数列中,从左到右不断增大有序数列
//关键:找到前面的有序数列中正确插入位置。
$arr  =array(6,18,2,4,16,8);

echo "
排序前:
"
; print_r($arr); insertSort($arr); echo "
排序后:
"
; print_r($arr); function insertSort(&$arr) { $len = count($arr); //从第二个记录起,跟前面的有序数列比较寻找插入位置 for($i = 1;$i < $len; $i++) { $insertData = $arr[$i];//要插入的记录 $pos = $i;//插入位置 for($j = $i - 1;$j >= 0;$j--) { if($arr[$j] > $insertData)//如果前面的记录大于要插入的记录 { $arr[$j+1] = $arr[$j];//前面的记录往后移一个下标 $pos--; } else { break; } } $arr[$pos] = $insertData;//插入到正确位置 echo "
第{$i}趟排序结果:"
; print_r($arr); } }

2.二分查找插入排序代码实现



header("content-type:text/html;charset=utf-8");

//二分查找插入排序:跟直接插入排序思路差不多,不同在通过二分查找来确定插入位置

$arr  =array(6,18,2,4,16,8);

echo "
排序前:
"
; print_r($arr); bsInsertSort($arr); echo "
排序后:
"
; print_r($arr); function bsInsertSort(&$arr) { $len = count($arr); for($i = 1;$i < $len; $i++) { $left = 0; $right = $i -1; $mid = 0; $insertData = $arr[$i];//要插入的记录 while($left<=$right) { $mid = ($left + $right)/2; if($insertData > $arr[$mid]) { $left = $mid + 1; }else { $right = $mid -1; } } //$left是要插入的位置 for($j=$i-1;$j>=$left;$j--) { $arr[$j+1] = $arr[$j];//后移比插入记录大的数 } $arr[$left] = $insertData; } }

你可能感兴趣的:(php)