比较常用的排序有插入排序、交换排序、选择排序、归并排序、分配排序等。
其中插入排序类的主要有:直接插入排序、折半插入排序、希尔排序
直接插入排序:
void InsertSort( SqList&L)
{
for ( i=2; i<=L.length; ++i)
if ( L.r[i-1].key > L.r[i].key ) {
L.r[0] = L.r[i];
L.r[i]=L.r[i-1];
for ( j=i-2; L.r[0].key < L.r[j].key; --j )
L.r[j+1] = L.r[j];
L.r[j+1] = L.r[0];
}
}
折半插入排序:
void BInsertSort(SqList &L)
{
for(int i=2;i<=L.length;++i){
L.r[0]=L.r[i];
low = 1; high = i-1;
while(low<=high){
m = (low+high)/2;
if(LT(L.r[0].key,L.r[m].key)) high = m + 1;
else low = m + 1;
}
for(j = i-1; j>=high+1; --j)
L.r[j+1] = L.r[j];
L.r[high + 1] = L.r[0];
}
}
希尔排序:
void ShellInsert (SqList &L, int dk)
{
for ( i=dk+1; i<=L.length; ++i )
if ( L.r[i].key < L.r[i-dk].key ) {
L.r[0] = L.r[i];
for ( j=i-dk; j>0 && L.r[0].key < L.r[j].key; j=j-dk )
L.r[j+dk] = L.r[j];
L.r[j+dk] = L.r[0];
}
}
void ShellSort(SqList&L, intdlta[], intt)
{
for (k=0; k<t; ++k)
ShellInsert(L, dlta[k]);
}//调用希尔排序