用C编写对排序问题的计时程序(计时有错误)求帮助,谢谢!
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>
#define SIZE 900
void Creat(long s1[],long s2[],long s3[]);
void Qsort(int v[],int left,int right); //快速排序
void Swap(int v[],int i,int j); //交换函数
void BubbleSort(int s[]); //冒泡排序
void InsertSort(int s[],int n); //插入排序(从小到大)
int main()
{
long s1[SIZE],s2[SIZE],s3[SIZE];
int i;
clock_t start1,end1,start2,end2,start3,end3;
long double duration1=0.0,duration2=0.0,duration3=0.0;
Creat(s1,s2,s3);
//printf("原数组为:\n");
//for(i=0;i<SIZE;i++)
// printf("s1[%d]=%ld\n",i,s1[i]);
start1=clock(); //快速排序开始时间
Qsort(s1,0,SIZE); //快速排序
end1=clock(); //快速排序结束时间
duration1=(double)(end1-start1)/CLOCKS_PER_SEC;; //快速排序时间差(秒)
printf("Quick Sort:%f\n",duration1);
start2=clock(); //冒泡排序开始时间
BubbleSort(s2);
end2=clock(); //冒泡排序结束时间
duration2=(double)(end2-start2)/CLOCKS_PER_SEC; //冒泡排序时间差(秒)
printf("Bubble Sort:%f\n",duration2);
start3=clock(); //插入排序开始时间
InsertSort(s3,SIZE);
end3=clock(); //插入排序结束时间
duration3=(double)(end3-start3)/CLOCKS_PER_SEC; //插入排序时间差(秒)
printf("Insert Sort:%f\n",duration3);
return 0;
}
void Creat(long s1[],long s2[],long s3[])
{
int i;
srand(time(NULL)); //rand()的种子
for(i=0;i<SIZE;i++)
s1[i]=s2[i]=s3[i]=rand()*65535/0x7fff; //产生随机数
}
void Qsort(int v[],int left,int right)
{
int i,last;
if(left>=right) //若数组包含的元素数少于两个
return 0; //则不执行任何操作
Swap(v,left,(left+right)/2); //将划分子集的元素
last=left; //(将为界的数)移动到v[0]
for(i=left+1;i<=right;i++) //划分子集
if(v[i]<v[left]) //通过与v[0](界)比较
Swap(v,++last,i); //将小的数移动到靠近v[0]的地(通过last),last可以保证将换过的数都小于v[0],证明的都会被证明
Swap(v,left,last); //恢复划分子集的元素(last本身就比v[0]小)
Qsort(v,left,last-1); //运算子集
Qsort(v,last+1,right);
}
void Swap(int v[],int i,int j)
{
int temp;
temp=v[i];
v[i]=v[j];
v[j]=temp;
}
void BubbleSort(int s[]) //冒泡排序
{
int i,j,temp;
int flag;
for(i=0;i<SIZE-1;i++)
{
flag=1; //(标记是否未排序部分满足要求)
for(j=0;j<SIZE-i-1;j++)
{
if(s[j]>s[j+1])
{
Swap(s,j,j+1);
flag=0; //排过序
}
}
if(flag==1) //排序完成
break;
}
}
void InsertSort(int s[],int n) //插入排序(从小到大)
{
int i,j,temp;
for(i=1;i<n;i++) //排序
{
temp=s[i]; //记录新插入的数值
for(j=i;j>0&&temp<s[j-1];j--) //比较并将大的往后移动
s[j]=s[j-1];
s[j]=temp; //插入新数
}
}
计时的方面出现了问题。。。
追问:很有用,谢谢啊~
但是快速排排序的结果出不,我想可能是速度太快,毫秒都记录不下来,有办法解决吗?