嗯。。先让我想一想。。这是要说直接插入排序,这是一种最简单的排序方式,它的基本操作就是把一个操作记录插入到已经排好序的队列中。
这个排序方式很好理解,所以代码也不是很复杂。
先说个当时书上的案例,一组记录:49,38,65,97,76,13,27。。。假设在排序过程中,已经有一个含4个记录的有序数列,
即:38,49,65,97.。接下来就是直接插入排序,这时需要考虑的是76,此时直接插入排序的做法是顺序查找找到合适的位置,
即将76插入到65---97中间,从而得到了一个新的有序数列:38,49,65,76,97.。这里给出代码:
void InsertSort(SqList &L) { int i,j; for(i=2;i<=L.length;++i) if LT(L.r[i].key,L.r[i-1].key) { L.r[0]=L.r[i]; //哨兵 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]; //插入 } printf("(%d,%d)",L.r[i].key,L.r[i].otherinfo); printf("\n"); } }
在这里有一个哨兵的概念,哨兵起监视的作用,避免数组下标越界。其他的就很好理解了。总的来说这个比较好理解,就少说些。
时间: 2024-10-11 05:42:07