【发布时间】:2016-06-29 14:29:42
【问题描述】:
我正在阅读 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中的插入排序实现。这里作者提到的改进如下。
通过缩短其内部循环将较大的条目向右移动一个位置而不是进行完全交换(从而将数组访问次数减少一半)来大幅加快插入排序并不难
我很难理解上述改进。作者是什么意思
- 将大型条目移到右侧一个位置,而不是全部交换,以及这将如何将数组访问减少到一半。
请求以简单示例为示例以便更好地理解。
【问题讨论】:
-
IMO 他可能认为,如果您在位置 27 中找到最大数字并且数组的长度为 100,那么您只需交换(切换)位置 27 和 100 上的数字,而不是移动整个数组。
标签: java algorithm sorting insertion-sort