0. 问题:
在待排序基数庞大的情况下,究竟哪种算法更利于排序?
1.定义:待排序文件
typedef int keytype;
typedef struct
{ keytype key;
keytype other;
}recordtype;
typedef struct
{ recordtype r[max-1];
int length;
}table;
*现保存为table.h*
2. 编写:排序算法
//* 按从小到大排序算法 *
//希尔插入排序
void shellinsertsort(table *tab)
{
int i,j,d;
d=tab->length/2;//设置增量
while(d>=1)
{ for(i=d+1;i<=tab->length;i++)
{ tab->r[0]=tab->r[i];//先保存第i个元素作为副本
j=i-d;//向前查找待插入位置
while(tab->r[0].key<tab->r[j].key&&j>0)
{ tab->r[j+d]=tab->r[j];//记录后移
j=j-d;//以增量为单位继续向前查找待插入位置
}
tab->r[j+d]=tab->r[0];//在当前位置插入第i个元素副本
}
d=d/2;//重新设置增量
}
}
//直接插入排序
void insertsort(table *tab)
{
int i,j;
for(i=2;i<=tab->length;i++)
{ j=i-1;
tab->r[0]=tab->r[i];//保存第i个元素作为副本,往前查找待插入位置
while(tab->r[0].key<tab->r[j].key)
{ tab->r[j+1]=tab->r[j];//记录后移
j=j-1;//继续以一个单位往前查找待插入位置
}
tab->r[j+1]=tab->r[0];//在当前位置插入第i个元素副本
}
}
//冒泡排序(改良后)
void bubblesort(table *tab)
{
int i,j,done;
i=1;<