您的位置:首页 > 其它

比较冒泡排序和快速排序的性能

2012-06-17 20:59 337 查看
1.取十组随机数,每组共200000个数,分别用冒泡排序和快速排序法排序,分别记录所化时间。

2.程序

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <ctype.h>
//#include <math.h>
FILE *fpt;  //* file point of targe
void exchange(int *a,int *b)
{
int t=*a;
*a=*b;
*b=t;
}
void bubble_sort(int list[],int n)
{
int i,j;
for(j=n-1; j>0; j--)
for(i=0; i<j; i++)
if(list[i]>list[i+1]) exchange(&list[i],&list[i+1]);
}

void quick_sort(int list[],int left,int right)
{

if (left<right)
{
int i=left; //from left to right
int j=right; //from right to left
int mid=(left+right)/2;
int t=list[mid];; //the base number to compare

while(1)
{
while (list[i]<t) i++;
while (list[j]>t) j--;
if(i>=j) break;
exchange(&list[i++],&list[j--]);
}
//  fprintf(fpt,"***\t");
// for(int a=0; a<40; a++) fprintf(fpt,"%d\t", list[a]);
//  fprintf(fpt,"***\n\n");
quick_sort(list,left,i-1);
quick_sort(list,j+1,right);
}
}

int main()
{
clock_t start_time, finish_time; // clock_t is a type of long int.
double total_time=0;
time_t t;
t=time(NULL);
printf("System time : %s\n",ctime(&t));
double d1,d2,d3;
// FILE *fpt;  //* file point of targe
fpt=stdout;
unsigned long n=200000;
if ((fpt = fopen("out.txt", "w+")) == NULL)
{
printf("Can't open file :out.txt \n");
exit(1);
}
printf("Calculation started...\n");
int sint
,sint2
;
for (int c=0;c<10;c++)
{

start_time = clock();
// generate random int
for (int i=0; i<n; i++)
{
srand(time(NULL));
sint[i]=rand();
sint2[i]=sint[i];
}
finish_time= clock();
d1 = (double)((finish_time - start_time)) / (double)CLOCKS_PER_SEC;
fprintf(fpt,"generate: %.12f second\t ",d1);

//bubble sort
start_time = clock();
bubble_sort(sint,n);
finish_time= clock();
d2 = (double)(finish_time - start_time) / (double)CLOCKS_PER_SEC;
fprintf(fpt,"bubble sort: %.12f second\t",d2);
// quick sort
start_time = clock();
quick_sort(sint2,0,n-1);
finish_time= clock();
d3 = (double)(finish_time - start_time) / (double)CLOCKS_PER_SEC;
fprintf(fpt,"quick sort: %.12f second\t", d3);
int k=0;
for(int i=0; i<n; i++)
{
if(sint[i]!=sint2[i])
{
fprintf(fpt,"~~~position %d is not same.~~~\n",i);
k++;
}
}
fprintf(fpt,"mismatch: %d \n",k);
total_time=total_time+d1+d2+d3;
}
fprintf(fpt,"total time: %f second\n", total_time);
fclose(fpt);

printf("\n\nCalculation finished!Please find results in out.txt.!\n\n");
t=time(NULL);
printf("System time : %s\n",ctime(&t));
getch();
exit(0);
return 0;
}


3.结果





4.比较时间

整个程序所化时间为13分15秒,等于795秒,所以统计的total time 应该没有问题。从两种方法所花时间上看,快速排序有绝对的优势。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: