Java 理解插入排序算法

Java 理解插入排序算法,java,insertion-sort,Java,Insertion Sort,我正在学习插入代码的机制。这是几个站点中描述的原始插入代码算法: for (int i = 0; i < a.length; i++) { int key = a[i]; int j = i; while (j > 0 && a[j-1] > key) { swap(a, j, j - 1); j--; } a[j] = key; } for(int i=0;i0&&a[j-1]>键)

我正在学习插入代码的机制。这是几个站点中描述的原始插入代码算法:

for (int i = 0; i < a.length; i++) {
    int key = a[i];
    int j = i;

    while (j > 0 && a[j-1] > key) {
        swap(a, j, j - 1);
        j--;
    }

    a[j] = key;
}
for(int i=0;i0&&a[j-1]>键){
互换(a,j,j-1);
j--;
}
a[j]=键;
}
问题是,在学习它的工作原理时,我意识到下一个不使用键的代码的功能完全相同:

for (int i = 0; i < a.length; i++) {
    int j = i;

    while (j > 0 && a[j-1] > a[j]) {
        swap(a, j, j - 1);
        j--;
    }
}
for(int i=0;i0&&a[j-1]>a[j]){
互换(a,j,j-1);
j--;
}
}
我的问题是,为什么原始算法需要密钥?对于第二种算法未考虑的某些边缘情况,是否需要使用它?如果是,它们将是哪些边缘情况?
经过一些测试,两种算法的结果执行相同数量的交换,因此我无法找出使用关键变量的区别。

这不是必需的。从语义上讲,这两种算法是相同的。如果需要,
是“当前观察值”(
a[j]
在修改版本中)。核心区别在于原始代码只获取一次值,而更新版本则一次又一次地获取值。第二种解决方案不是看起来更像是冒泡排序,而是向后的吗?您的问题得到了回答吗?