这是一种有效的插入排序形式吗?

时间:2018-05-01 11:42:06

标签: perl sorting insertion-sort

以下代码是否代表插入排序的有效实现?

Set doc = wordApp.Documents.Open(docPath)

2 个答案:

答案 0 :(得分:2)

是的,但它不必要地重新审视已经排序的元素。修正:

for my $i (1..#$arr) {
    my $j = $i;
    while ( $j > 0 && $arr[$j] < $arr[$j-1] ) {
        ($arr[$j], $arr[$j-1]) = ($arr[$j-1], $arr[$j]);
        $j--;
    }
}

我添加了my $j = $i;,并在内部循环中从$i切换到$j。对for循环的更改不是功能变化;它更干净,更快。

现在,该算法与Wikipedia上显示的第一个算法相同。

基本上,将@arr视为两个数组。前导元素形成排序数组,尾随元素形成要插入的未排序元素数组。 $i是未排序元素的第一个元素的索引,内循环将$arr[$i]插入到适当的位置。

答案 1 :(得分:0)

是。它与显示on Wikipedia

的第一个算法完全相同