写了一个简单选择排序与堆排序的比较,这个大概写了3个小时。主要是对堆排序的算法不太熟悉,有研究了一下它的算法。先上源代码
本次程序的总结和注意的地方:
1:堆排序的算法得到了很好的掌握。书上的算法是从1 开始,而代码中是从0开始。开始这个纠结了好久。还是自己算法不精~
2:C语言内部编译器运行时间的情况。clock函数和clocks-pre-src的意义,了解很多
3;这个算法到现在有个缺憾,就是在分别调用两次算法,就得用开辟两个数组的空间。这样造成极大的浪费。现在正在着手解决这个问题。 2013年12月27
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