算法详情【插入排序】

来源:互联网 发布:芜湖一中王海飞 知乎 编辑:程序博客网 时间:2024/06/11 17:24

一、 直接插入排序思想:

将待排序的记录Ri,插入到已排好序的记录表R1, R2 ,…., Ri-1中,得到一个新的、记录数增加1的有序表。 直到所有的记录都插入完为止。

设待排序的记录顺序存放在数组R[1…n]中,在排序的某一时刻,将记录序列分成两部分:

◆ R[1…i-1]:已排好序的有序部分;

◆ R[i…n]:未排好序的无序部分。

显然,在刚开始排序时,R[1]是已经排好序的。

二、 直接插入排序算法

= 0; $j--) {  //$j=0,1,0            //$arr[$i];//需要插入的元素; $arr[$j];//需要比较的元素            if ($tmp < $arr[$j]) {                //发现插入的元素要小,交换位置                //将后边的元素与前面的元素互换                $arr[$j + 1] = $arr[$j];                //将前面的数设置为 当前需要交换的数                $arr[$j] = $tmp;            } else {                //如果碰到不需要移动的元素                //由于是已经排序好是数组,则前面的就不需要再次比较了。                break;            }        }    }    //将这个元素 插入到已经排序好的序列内。返回    return $arr;}$arr = array(6,5,4,3,2,1);$res = input_sort($arr);print_r($res);//排序过程//[6],5,4,3,2,1////[5,6],4,3,2,1////5,4,6,3,2,1//[4,5,6],3,2,1////4,5,3,6,2,1//?>

三、 直接插入排序复杂度分析

(1) 最好情况:若待排序记录按关键字从小到大排列(正序),算法中的内循环无须执行,则一趟排序时:关键字比较次数1次,每趟排序都要移动将近1个记录,这样n个记录最终的时间复杂度是O(n)。

(2) 最坏情况:若待排序记录按关键字从大到小排列(逆序),n个记录需要n-1趟排序,最坏的情况就是完全逆序的情况,每趟排序都要移动将近n个记录,这样最终的时间复杂度是O(n2)。

(3) 稳定性:稳定排序


原创粉丝点击