int a[100]; //全局数组
const int n = 100;//一万个数据
//函数声明
void ReadArray(char*filename); //读文件
double SelectSort(); //选择排序
double HeapSort(); //堆排序
//排序函数
void SeSort(int *a,int n); //选择排序
void PercDown(int *a, int p, int N);
void HepSort(int *a, int n); //堆排序
void Print(int *a,int n);
void swap(int *p, int q);
//主函数
int main(){
double t_sort=0,t_sum_in=0,t_sum_sh=0,t_sum_bb=0,t_sum_qc=0,t_sum_ss=0,t_sum_heap=0;
int cnt; //为了让时间更准确,求3次的平均值
cnt = 3;
while(cnt--){
t_sum_ss += SelectSort();
}
printf("选择排序:%lfms\n",t_sum_ss/3);
cnt = 3;
while(cnt--){
t_sum_heap += HeapSort();
}
printf("堆排序:%lfms\n",t_sum_heap/3);
return 0;
}
//函数实现
//将数据读到数组a中
void ReadArray(charfilename){
FILE *fp;
if(!(fp = fopen(filename,"r"))){
printf("Cannot open file\n");
exit(0);
}
int i = 0;
while(!feof(fp)){
fscanf(fp,"%d\n",&a[i++]);
}
fclose(fp);
}
//以选择排序算法为例,示例排序算法调用及时间计算
double SelectSort(){
ReadArray("D://程序编写//shiyan7//data.txt");
clock_t begin,end;
begin = clock();
SeSort(a,n); //调用选择排序算法
end = clock();
return (double)(end - begin);
}
void swap(int p,int q)
{
int t;
t=p;p=q;q=t;
}
//选择排序的c语言实现
void SeSort(int a[ ],int N)
{
int i,j,min;
for(i=0;i<N-1;i++){
min=i;
for(j=i+1;j<N;j++)
if(a[j]<a[min])
min=j;
swap(&a[i],&a[min]);
}
}
void PercDown(int A[],int p,int N)
{
int Parent,Child;
int X;
X=A[p];
for(Parent=p;(Parent*2+1)<N;Parent=Child)
{
Child=Parent * 2+1;
if((Child!=N-1)&&A[Child]<A[Child+1])
Child++;
if(X>=A[Child])break;
else
A[Parent]=A[Child];
}
A[Parent]=X;
}
//堆排序
double HeapSort(int A[],int N)
{
int i;
for(i=N/2-1;i>=0;i--)
PercDown(A,i,N);
for(i=N-1;i>0;i--)
{
Swap(&A[0],&A[i]);
PercDoown(A,0,i);
}
}