欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

php之插入排序

程序员文章站 2022-03-25 12:54:44
...
php之插入排序

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); functioninsertSort(&$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); functionbsInsertSort(&$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; } }