#include
#define MAX 5000
int R[MAX];
float compare; /*记录比较次数的全局变量*/
float sort; /*记录排序次数的全局变量*/
/*插入排序*/
void Insertsort(int r[],int n)
{
int i,j,temp,curr,index;
for(i=1;ir[j])/*如果当前元素r[j]比索引指向的元素r[i]小,换位*/
sort++;
temp=r[i];
r[i]=r[j];
r[j]=temp;
}
}
}
}
/*希尔排序*/
/*以2的n次方为步长*/
void ShellSort(int r[],int n)
{
int gap,i,j,temp;
for(gap=n/2;gap>0;gap/=2) /*以2的n次方为步长*/
{
for(i=gap;i= 0) && (r[j] > r[j+gap]);j -= gap )
{
temp=r[j];
r[j]=r[j+gap];
r[j+gap]=temp;
sort++;
compare++;
}
}
}
}
/*以上课给定数为步长*/
void ShellSort2(int r[],int n)
{
int gaps[]={1,5,13,43,113};
int i,j,k,gap,temp;
for(k=0;gaps[k]=0)/*每次步长变小*/
{
gap=gaps[k];
for(i=gap;i=gap&&r[j-gap]>temp)/*当前元素以gap为步长找位置*/
{
compare++;
r[j]=r[j-gap];
j=j-gap;
}
r[j]=temp;/*将当前元素放到他的位置*/
sort++;
}
}
}
/*归并排序*/
void MergeSort(int array[],int top,int bottom)
{
if(topr[i]))/*i后,j之前的比temp大r[i]的位置*/
{
i++;
compare++;
}
if(iR[j+1]&&j