插入排序是有问题的领域
Insertion sorts's problamatic area
for(i = 1; i < len; i++){
for(j = i - 1; j >= 0; --j){
if(data[j] > data[1 + j]){
swap(j, j + 1);
} else {
break;
}
}
}
swap 方法交换元素。为什么它应该是 --j 而不是 j-- ?有什么不同 ?放 j-- 有什么好处?
在这种情况下,两者都有效。
在 C++ 中有充分的理由使用 ++i。
由于您使用 C 编写代码,因此请选择一个并坚持使用。
对于基本类型,后缀和前缀之间没有性能差异 increment/decrement。
顺便说一句,有更高效的插入排序算法实现,内循环中只有 1 个赋值(交换执行 3 个)。
int i, key, j;
for (i = 1; i < n; i++)
{
key = arr[i];
j = i-1;
for (j = i-1; j >= 0 && arr[j] > key; --j) {
arr[j+1] = arr[j];
}
arr[j+1] = key;
}
for(i = 1; i < len; i++){
for(j = i - 1; j >= 0; --j){
if(data[j] > data[1 + j]){
swap(j, j + 1);
} else {
break;
}
}
}
swap 方法交换元素。为什么它应该是 --j 而不是 j-- ?有什么不同 ?放 j-- 有什么好处?
在这种情况下,两者都有效。
在 C++ 中有充分的理由使用 ++i。 由于您使用 C 编写代码,因此请选择一个并坚持使用。
对于基本类型,后缀和前缀之间没有性能差异 increment/decrement。
顺便说一句,有更高效的插入排序算法实现,内循环中只有 1 个赋值(交换执行 3 个)。
int i, key, j;
for (i = 1; i < n; i++)
{
key = arr[i];
j = i-1;
for (j = i-1; j >= 0 && arr[j] > key; --j) {
arr[j+1] = arr[j];
}
arr[j+1] = key;
}