请以L.r[k+1]作为监视哨改写下面一段直接插入排序算法,其中L.r[1..k]为待排序记录且k<MAXSIZE。void insertSort(Sqlist &L) {for(i = 2;i<=L.length;++i) if(LT(L.r[i].key,L.r[i-1].key)){L.r[0] = L.r[i];L.r[i] = L.r[i-1]; for(j=i-2;LT(L.r[0].key,L.r[j].key); --j) L.r[j+1] = L.r[j]; L.r[j+1] = L.r[0];}}
时间: 2024-01-11 15:02:04 浏览: 62
void insertSort(Sqlist &L) {
for (int i = 2; i <= L.length; ++i) {
L.r[0] = L.r[i];
int j;
for (j = i - 1; LT(L.r[0].key, L.r[j].key); --j) {
L.r[j + 1] = L.r[j];
}
L.r[j + 1] = L.r[0];
}
}
改动的地方在于,在排序过程中使用 L.r[k+1] 作为监视哨,即将待插入元素存储在 L.r[0] 中,然后在内层循环中将 L.r[0] 与已排序的元素逐一比较,寻找插入位置,当找到合适的位置时,再将 L.r[0] 插入到该位置。这样可以避免每次都需要判断 j 是否大于 0,提高了算法的效率。
阅读全文