关于Robert Sedgewick的插入排序改进

时间:2016-03-14 13:54:20

标签: java algorithm sorting insertion-sort

我正在阅读Robert Sedgewick所着的算法书。

public static void sort(Comparable[] a)
{   // Sort a[] into increasing order.
    int N = a.length;
    for (int i = 1; i < N; i++)
    { // Insert a[i] among a[i-1], a[i-2], a[i-3]... ..
        for (int j = i; j > 0 && less(a[j], a[j-1]); j--)
            exch(a, j, j-1);
    }
}

以上是java中的插入排序实现。在这里,作者提到了改进如下。

  

通过缩短内部循环以将较大的条目移动到正确的位置而不是进行完全交换(从而将数组访问次数减少一半),大大加快插入排序并不困难。

我很难理解上面的改进。

是作者的意思
  1. 将大型条目移动到正确的一个位置,而不是完全交换,以及如何将阵列访问减少到一半。
  2. 以简单示例请求示例以便更好地理解。

1 个答案:

答案 0 :(得分:3)

我认为他指的是你不需要继续实际交换元素,因为你最终会反复移动相同的元素。

例如,您可以最初缓存module MessagesHelper def self_or_other(message) message.user == current_user ? "current-user-message" : "" end end - 元素的值,并在内部循环中直接引用它:

i

Demo