版权声明:未经原作者允许不得转载本文内容,否则将视为侵权 https://blog.csdn.net/springhammer/article/details/88559216
测评选择排序和归并排序算法的运行效率
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<windows.h>
#define MAX 65536*2
//选择排序
void SelectSort(int r[],int length)
{
int i,j,k;
int n;
int x;
n=length;
for (i=1;i<=n-1;++i)
{
k=i;
for(j=i+1;j<=n;++j)
if(r[j]<r[k])
k=j;
if( k!=i)
{
x= r[i];
r[i]=r[k];
r[k]=x;
}
}
}
//归并排序
void merge(int a[],int tmparray[],int lpos,int rpos,int rightend)
{
int i,leftend,numelements,tmppos;
leftend=rpos-1;
tmppos=lpos;
numelements=rightend-lpos+1;
while(lpos<=leftend && rpos<=rightend)
if(a[lpos]<=a[rpos])
tmparray[tmppos++]=a[lpos++];
else
tmparray[tmppos++]=a[rpos++];
while(lpos<=leftend)
tmparray[tmppos++]=a[lpos++];
while(rpos<=rightend)
tmparray[tmppos++]=a[rpos++];
for(i=0;i<numelements;i++,rightend--)
a[rightend]=tmparray[rightend];
}
void msort(int a[],int tmparray[],int left,int right)
{
int center;
if(left<right)
{
center=(left+right)/2;
msort(a,tmparray,left,center);
msort(a,tmparray,center+1,right);
merge(a,tmparray,left,center+1,right);
}
}
void mergesort(int a[],int n)
{
int *tmparray;
tmparray=(int*)malloc(n*sizeof(int));
if(tmparray!=NULL)
{
msort(a,tmparray,0,n-1);
free(tmparray);
}
else
printf("no space for tmp array!");
}
int main()
{
long dwStart,dwStop,runtime;
int num[MAX],a[MAX],i,j;
dwStart=GetTickCount();
srand((unsigned)time(NULL));
for(i=0;i<MAX;i++)
num[i]=rand();
dwStop=GetTickCount();
runtime=dwStop-dwStart;
printf("生成%d个随机数运行了%ldms\n\n",MAX,runtime);
printf("**************************\n");
for(i=0;i<MAX;i++)
a[i]=num[i];
dwStart=GetTickCount();
SelectSort(a,MAX);
dwStop=GetTickCount();
runtime=dwStop-dwStart;
printf("使用简单选择排序运行了%ldms\n",runtime);
for(i=0;i<MAX;i++)
a[i]=num[i];
dwStart=GetTickCount();
mergesort(a,MAX);
dwStop=GetTickCount();
runtime=dwStop-dwStart;
printf("使用归并排序运行了%ldms\n",runtime);
printf("**************************\n");
printf("\n排序测试完成!");
getchar();
}