思路:
- 1、选择第一个元素作为有序数组a
- 2、取出下一个元素x,从后往前依次遍历有序数组a
- 3、如果有序数组元素大于x,则将有序数组元素后移一个位置
- 4、如果有序元素数组小于x,则x插入到当前元素的后面
- 5.重复上述2,3,4步骤
<?php
/**
* Created by PhpStorm.
* User: fql
* Date: 2020/6/17
* Time: 下午10:42
*/
namespace app\index\controller;
/**
* Class InsertSort
* 1、选择第一个元素作为有序数组a
* 2、取出下一个元素x,从后往前依次遍历有序数组a
* 3、如果有序数组元素大于x,则将有序数组元素后移一个位置
* 4、如果有序元素数组小于x,则x插入到当前元素的后面
* 5.重复上述2,3,4步骤
*/
class InsertSort extends \think\Controller
{
public function sort(){
$arr = [100,78,34,56,21,33,90,31,67,54];
$this->InsertSort($arr);
dump($arr);
}
public function InsertSort(&$array){
$len = count($array);
for($currentIndex = 1;$currentIndex < $len;$currentIndex++ ){
//将下一个元素排序到已经排序的数组里面
$this->sortCurrent($array,$currentIndex);
}
}
private function sortCurrent(&$array,$currentIndex){
$currentValue = $array[$currentIndex];
for($sortedIndex = $currentIndex - 1;$sortedIndex >= 0;$sortedIndex--) {
if($array[$sortedIndex] > $currentValue ){
$array[$sortedIndex + 1] = $array[$sortedIndex];
if($sortedIndex==0){
$array[$sortedIndex] = $currentValue;
}
}else{
$array[$sortedIndex + 1] = $currentValue;
break;
}
}
}
}
网友评论