冒泡排序与归并排序运行时间的比较

为了证明自己的正确性,特写此文章,真理从来都是实践得到的。。。

https://github.com/congmingyige/Something-in-algorithm-lesson

生成数据:

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <time.h>
 4 
 5 int main()
 6 {
 7     FILE *fp=fopen("sort.in","w");
 8     long n,i;
 9     srand(time(NULL));//wrong
10     scanf("%ld",&n);
11     fprintf(fp,"%ld\n",n);
12     for (i=1;i<=n;i++)
13         fprintf(fp,"%ld ",rand()*9+rand());
14     fclose(fp);
15     return 0;
16 }

冒泡排序:

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 long a[100005];
 4 
 5 int main()
 6 {
 7     FILE *fp1=fopen("sort.in","r");
 8     FILE *fp2=fopen("sort.out","w");
 9     long n,i,j,k,t;
10 //    scanf("%ld",&n);
11 //    for (i=1;i<=n;i++)
12 //        scanf("%ld",&a[i]);
13     fscanf(fp1,"%ld",&n);
14     for (i=1;i<=n;i++)
15         fscanf(fp1,"%ld",&a[i]);
16     //bubble sort
17     for (i=1;i<n;i++)
18         for (j=n,k=n-1;j>i;j--,k--)
19             if (a[j]<a[k])
20             {
21                 t=a[j];
22                 a[j]=a[k];
23                 a[k]=t;
24             }
25 //    for (i=1;i<=n;i++)
26 //        printf("%ld ",a[i]);
27     for (i=1;i<=n;i++)
28         fprintf(fp2,"%ld ",a[i]);
29     fclose(fp1);
30     fclose(fp2);
31     return 0;
32 }

归并排序:

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 long a[100005],b[100005];
 4 
 5 void mergesort(long l,long r)
 6 {
 7     long mid=(l+r)>>1,i,j,k;
 8     if (l!=mid)
 9         mergesort(l,mid);
10     if (mid<r)
11         mergesort(mid+1,r);
12     for (i=l;i<=r;i++)
13         b[i]=a[i];
14     i=l; j=mid+1; k=l;
15     while (i<=mid && j<=r)
16     {
17         if (b[i]<b[j])
18         {
19             a[k]=b[i];
20             k++;
21             i++;
22         }
23         else if (b[i]>b[j])
24         {
25             a[k]=b[j];
26             k++;
27             j++;
28         }
29         else
30         {
31             a[k]=b[i];
32             k++;
33             i++;
34             a[k]=b[j];
35             k++;
36             j++;
37         }
38     }
39     while (i<=mid)
40     {
41         a[k]=b[i];
42         k++;
43         i++;
44     }
45     while (j<=r)
46     {
47         a[k]=b[j];
48         k++;
49         j++;
50     }
51 }
52 
53 int main()
54 {
55     FILE *fp1=fopen("sort.in","r");
56     FILE *fp2=fopen("sort.out","w");
57     long n,i;
58 //    scanf("%ld",&n);
59 //    for (i=1;i<=n;i++)
60 //        scanf("%ld",&a[i]);
61     fscanf(fp1,"%ld",&n);
62     for (i=1;i<=n;i++)
63         fscanf(fp1,"%ld",&a[i]);
64     //mergesort
65     mergesort(1,n);
66 //    for (i=1;i<=n;i++)
67 //        printf("%ld ",a[i]);
68     for (i=1;i<=n;i++)
69         fprintf(fp2,"%ld ",a[i]);
70     fclose(fp1);
71     fclose(fp2);
72     return 0;
73 }

 

猜你喜欢

转载自www.cnblogs.com/cmyg/p/9016353.html