排序算法---插入排序

Posted xinxinmifan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了排序算法---插入排序相关的知识,希望对你有一定的参考价值。

插入排序工作原理:
1.将一个数组拆分成两个数组,一个取第一个元素认为是有序的;剩余的元素认为是无序的
2.每次从无序数组中取出第一个元素与有序数组最后一个元素进行比较
待插入元素比较大,则放有序数组后面;如果比较小,则与有序数组倒数第二个进行比较,对有序数组从后往前进行扫描,直到遇到比他小的位置,插到它的后面
3.依次执行上面的操作,直到序列全部有序

数据演示:

待排序序列:10 7 15 2 5 27 13 

第0轮:【10】 7 15 2 5 27 13   //循环i=1  当前比较元素下标i 
    
第1轮:【7 10】 15 2 5 27 13

第2轮:【7 10 15】 2 5 27 13

第3轮:【2 7 10 15】 5 27 13
    
第4轮:【2 5 7 10 15】 27 13

第5轮:【2 5 7 10 15 27】 13

第6轮:【2 5 7 10 13 15 27】

代码实现:

function insertionSort($arr) {
    $len = count($arr);
    if($len<=0) {
        return $arr;
    }
    for($i=1;$i<$len;$i++) {
        $current = $arr[$i];   //无序序列比较值
        $curIndex = $i; //无序序列比较值的下标
        while($curIndex>0 && $arr[$curIndex-1]>$current) {
            $arr[$curIndex] = $arr[$curIndex-1];
            $curIndex--;  //有序序列从后往前进行比较
        }
        $arr[$curIndex] = $current;
    }
    return $arr;
}
print_r(insertionSort($arr));

以上是关于排序算法---插入排序的主要内容,如果未能解决你的问题,请参考以下文章

排序算法之冒泡选择插入排序(Java)

排序算法之冒泡选择插入排序(Java)

《算法》笔记 3 - 选择排序插入排序希尔排序

三大基础排序算法(冒泡排序,选择排序,插入排序)

排序算法学习(直接插入排序,希尔排序,选择排序,堆排序,冒泡排序)

插入排序算法详解及代码实现