#8
正好刚把最近学的排序算法总结了一下,看看有帮助不??
void insertsort(int a[],int n) //简单插入排序
{
int i,j,k,t;
for(i=1;i
for(j=0;j
if(a[j]>a[i])
{
t=a[i];
for(k=i;k>j;k--) a[k]=a[k-1];
a[j]=t;
break;
}
}
void InsertSort(int a[],int n) //折半插入排序
{
int i,j,temp,low,high,m;
for(i=1;i
{
temp=a[i];
low=0;high=i-1;
while(low<=high)
{
m=(low+high)/2;
if(temp
else low=m+1;
}
for(j=i-1;j>=low;j--) a[j+1]=a[j];
a[low]=temp;
}
}
typedef struct{ //表插入排序(不需要移动元素 )
int a;
int next; //指针,指向比a大一点的数
}slnode;
void arrange(slnode r[],int n)
{
int i,p,q;
slnode t;
p=r[0].next;
for(i=1;i
{
while(p
q=r[p].next; //必须有
if(p!=i)
{
t=r[p];r[p]=r[i];r[i]=t;
r[i].next=p;
}
p=q;
}
}
void listinsertsort(int aa[],int n) //表插入排序(不需要移动元素 )
{
int i;
int j,j0;
const int maxint=20000;
slnode r[n+1];
r[0].a=maxint;r[0].next=1;
r[1].next=0;
for(i=0;i<10;i++)
r[i+1].a=aa[i];
for(i=2;i<11;i++)
{
j=r[0].next;
j0=0;
while(r[i].a>r[j].a) {j0=j;j=r[j].next;}
r[j0].next=i;
r[i].next=j;
}
arrange(r,n+1);
for(i=0;i<10;i++)
aa[i]=r[i+1].a;
}
void shellinsert(int a[],int n,int m)
{
//功能:以m为增量对a进行插入排序
int i,j,t;
for(i=m;i
if(a[i]