1. /*
2. 烟台大学计算机学院
3.
4. 文件名称:lsy.cpp
5.
6. 作者:贾存钰
7.
8. 完成日期:2017年9月13日
9.
10. 问题描述:选择排序与快速排序差别
11.
12.
13.
14. */
15.
16. //选择排序:
17.
1. #include <stdio.h>
2. #include <time.h>
3. #include <stdlib.h>
4. #define MAXNUM 100000
5. void selectsort(int a[], int n)
6. {
7. int i, j, k, tmp;
8. for(i = 0; i < n-1; i++)
9. {
10. k = i;
11. for(j = i+1; j < n; j++)
12. {
13. if(a[j] < a[k])
14. k = j;
15. }
16. if(k != j)
17. {
18. tmp = a[i];
19. a[i] = a[k];
20. a[k] = tmp;
21. }
22. }
23. }
24.
25. int main()
26. {
27. int x[MAXNUM];
28. int n = 0;
29. double t1,t2;
30. FILE *fp;
31. fp = fopen("numbers.txt", "r");
32. if(fp==NULL)
33. {
34. printf("打开文件错!请下载文件,并将之复制到与源程序文件同一文件夹下。\n");
35. exit(1);
36. }
37. while(fscanf(fp, "%d", &x[n])!=EOF)
38. n++;
39. printf("数据量:%d, 开始排序....", n);
40. t1=time(0);
41. selectsort(x, n);
42. t2=time(0);
43. printf("用时 %d 秒!", (int)(t2-t1));
44. fclose(fp);
45. return 0;
46. }
47.
48. //快速排序:
49.
50. #include <stdio.h>
51. #include <time.h>
52. #include <stdlib.h>
53. #define MAXNUM 100000
54. void quicksort(int data[],int first,int last)
55. {
56. int i, j, t, base;
57. if (first>last)
58. return;
59. base=data[first];
60. i=first;
61. j=last;
62. while(i!=j)
63. {
64. while(data[j]>=base && i<j)
65. j--;
66. while(data[i]<=base && i<j)
67. i++;
68. /*交换两个数*/
69. if(i<j)
70. {
71. t=data[i];
72. data[i]=data[j];
73. data[j]=t;
74. }
75. }
76. data[first]=data[i];
77. data[i]=base;
78. quicksort(data,first,i-1);
79. quicksort(data,i+1,last);
80. }
81.
82. int main()
83. {
84. int x[MAXNUM];
85. int n = 0;
86. double t1,t2;
87. FILE *fp;
88. fp = fopen("numbers.txt", "r");
89. if(fp==NULL)
90. {
91. printf("打开文件错!请下载文件,并将之复制到与源程序文件同一文件夹下。\n");
92. exit(1);
93. }
94. while(fscanf(fp, "%d", &x[n])!=EOF)
95. n++;
96. printf("数据量:%d, 开始排序....", n);
97. t1=time(0);
98. quicksort(x, 0, n-1);
99. t2=time(0);
100. printf("用时 %d 秒!", (int)(t2-t1));
101. fclose(fp);
102. return 0;
103. }