插入例如:[i位置L.r587514|36496123975280highlow插入m再如:位置752397L.r14364952586180lhigh llowmm
14 36 49 52 80 58 61 23 97 75 i low high m m low low m high 14 36 49 52 58 61 80 23 97 75 i low high m high m high m low 例如: 再如: 插入 位置 插入 位置 L.r L.r
void BilnsertionSort (SqList &L)for (i=2; i<=L.length; ++i) L.r[O] = L.r[i];// 将 L,r[i] 暂存到 L.r[O]在L.r[1..i-1]中折半查找插入位置;for(j-i-l; j>=high+l; --j )/记录后移L.r[j+1] = L.r[i];L.r[high+1] = L.r[O]; // 插入↑ // for?//BInsertSortP
void BiInsertionSort ( SqList &L ) { } // BInsertSort 在 L.r[1.i-1]中折半查找插入位置; for ( i=2; i<=L.length; ++i ) { } // for L.r[0] = L.r[i]; // 将 L.r[i] 暂存到 L.r[0] for ( j=i-1; j>=high+1; -j ) L.r[j+1] = L.r[j]; // 记录后移 L.r[high+1] = L.r[0]; // 插入
low = l; high = i-l;while (low<-high) {// 折半m = (low+high)/2:if (L.r[O].key < L.r[m].key)high =m-l;//插入点在低半区elselow=m+l://插入点在高半区
low = 1; high = i-1; while (low<=high) { } m = (low+high)/2; // 折半 if (L.r[0].key < L.r[m].key) high = m-1; // 插入点在低半区 else low = m+1; // 插入点在高半区
三、美表插入排序为了减少在排序过程中进行的"移动”记录的操作,必须改变排序过程中采用的存储结构。利用静态链表进行排序,并在排序完成之后,一次性地调整各个记录相互之间的位置,即将每个记录都调整到它们所应该在的位置上
三、表插入排序 为了减少在排序过程中进行的 “移动”记录的操作,必须改变排序过 程中采用的存储结构。利用静态链表 进行排序,并在排序完成之后,一次 性地调整各个记录相互之间的位置, 即将每个记录都调整到它们所应该在 的位置上
静态链表的定义:100SIZE#define//结点Typedefstruct3RcdType rc;int next;↓ SLNode:1/链表Typedeff structSLNoder[SIZE];intlength;SLinkListType:
静态链表的定义: #define SIZE 100 Typedef struct { //结点 RcdType rc; int next; }SLNode; Typedef struct { //链表 SLNode r[SIZE]; int length; }SLinkListType;