当前位置:编程学习 > C/C++ >>

用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; //插入新数 } } 计时的方面出现了问题。。。
追问:很有用,谢谢啊~
但是快速排排序的结果出不,我想可能是速度太快,毫秒都记录不下来,有办法解决吗?
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,