简单选择排序与堆排序的比较

写了一个简单选择排序与堆排序的比较,这个大概写了3个小时。主要是对堆排序的算法不太熟悉,有研究了一下它的算法。先上源代码
 1 #include<sdtio.h>
 2 #include<stdlib.h>
 3 void simple(int a[],int n,int m)
 4 {
 5     int i,j;
 6     int t;
 7     for(i=0;i
 8     {
 9         for(j=n-1;j>i;j--)
10             if(a[j]>a[j-1])
11             {
12                 t=a[j-1];
13                 a[j-1]=a[j];
14                 a[j]=t;
15             }
16     }
17     printf("用简单选择排序算法得出的最大的前%d名为:",m);
18     for(i=0;i
19         printf("%d ",a[i]);
20     printf("\n");
21 }
22 void adjust(int a[],int i,int n)
23 {
24     int t,j;
25     t=a[i];
26     for(j=2*i+1;j
27     {
28         if(j
29         if(t>=a[j]) break;
30         a[i]=a[j];
31         i=j;
32     }
33     a[i]=t;
34 }
35 
36 void heap(int a[],int n,int m)
37 {
38     int i,j,t;
39     for(i=n/2-1;i>=0;--i)
40         adjust(a,i,n);
41     printf("堆排序:\n");
42     printf("\n");
43     for(i=n;i>0;--i)
44     {
45         t=a[0];
46         a[0]=a[i-1];
47         a[i-1]=t;
48         adjust(a,0,i-1);
49     }
50     for(i=n-1;i>=(n-m);--i)
51         printf("%d ",a[i]);
52     printf("\n");
53 }
54 
55 int main()
56 {
57     int i;
58     clock_t start, finish; 
59     double  duration; 
60     int a[10000],b[10000];
61     printf("请输入10个数:\n");
62     for(i=0;i<10;i++)
63     {
64         scanf("%d",&a[i]);
65         b[i]=a[i];
66     }
67     start = clock();
68     simple(a,10,10);
69     finish = clock();
70     duration = (double)(finish - start) / CLOCKS_PER_SEC;
71     printf("简单选择排序的运行时间是:%lf\n",duration);
72     start = clock();
73     heap(b,10,10);
74     finish = clock();
75     duration = (double)(finish - start) / CLOCKS_PER_SEC;
76     printf("堆排序的运行时间是:%lf\n",duration);
77    printf("随机数列:");
78    for(i=0;i<10000;i++)
79    {
80        a[i]=rand();
81        b[i]=a[i];
82    }
83    printf("\n");
84       start = clock();
85     simple(a,10000,10);
86     finish = clock();
87     duration = (double)(finish - start) / CLOCKS_PER_SEC;
88     printf("简单选择排序的运行时间是:%lf\n",duration);
89     start = clock();
90     heap(b,10000,10);
91     finish = clock();
92     duration = (double)(finish - start) / CLOCKS_PER_SEC;
93     printf("堆排序的运行时间是:%lf\n",duration);
94    return 0;
95 }

 


本次程序的总结和注意的地方:
1:堆排序的算法得到了很好的掌握。书上的算法是从1 开始,而代码中是从0开始。开始这个纠结了好久。还是自己算法不精~
2:C语言内部编译器运行时间的情况。clock函数和clocks-pre-src的意义,了解很多
3;这个算法到现在有个缺憾,就是在分别调用两次算法,就得用开辟两个数组的空间。这样造成极大的浪费。现在正在着手解决这个问题。                                          2013年12月27

 

转载于:https://www.cnblogs.com/ccode/p/3906026.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值