- /*
- Copyright (c)2015,烟台大学计算机与控制工程学院
- All rights reserved.
- 文件名称:项目3体验复杂度.cpp
- 作 者:李丛丛
- 完成日期:2015年9月8日
- 版 本 号:v1.0
- 问题描述:排序是计算机科学中的一个基本问题,产生了很多种适合不同情况下适用的算法,
- 也一直作为算法研究的热点。本项目提供两种排序算法,复杂度为O(n2)的选择排序selectsort,
- 和复杂度为O(nlogn)的快速排序quicksort,在main函数中加入了对运行时间的统计。
- 输入描述:从文件中读取大量的数据 。
- 程序输出:数据量及用时。
- */
- (1)复杂度是O(n2)的选择排序程序:
- 01.#include <stdio.h>
02.#include <time.h>
03.#include <stdlib.h>
04.#define MAXNUM 100000
05.void selectsort(int a[], int n)
06.{
07. int i, j, k, tmp;
08. for(i = 0; i < n-1; i++)
09. {
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. while(fscanf(fp, "%d", &x[n])!=EOF)
33. n++;
34. printf("数据量:%d, 开始排序....", n);
35. t1=time(0);
36. selectsort(x, n);
37. t2=time(0);
38. printf("用时 %d 秒!", (int)(t2-t1));
39. fclose(fp);
40. return 0;
41.}
-
(2)复杂度为O(nlogn)的快速排序程序:
01.#include <stdio.h> 02.#include <time.h> 03.#include <stdlib.h> 04.#define MAXNUM 100000 05.void quicksort(int data[],int first,int last) 06.{ 07. int i, j, t, base; 08. if (first>last) 09. return; 10. base=data[first]; 11. i=first; 12. j=last; 13. while(i!=j) 14. { 15. while(data[j]>=base && i<j) 16. j--; 17. while(data[i]<=base && i<j) 18. i++; 19. /*交换两个数*/ 20. if(i<j) 21. { 22. t=data[i]; 23. data[i]=data[j]; 24. data[j]=t; 25. } 26. } 27. data[first]=data[i]; 28. data[i]=base; 29. quicksort(data,first,i-1); 30. quicksort(data,i+1,last); 31.} 32. 33.int main() 34.{ 35. int x[MAXNUM]; 36. int n = 0; 37. double t1,t2; 38. FILE *fp; 39. fp = fopen("numbers.txt", "r"); 40. while(fscanf(fp, "%d", &x[n])!=EOF) 41. n++; 42. printf("数据量:%d, 开始排序....", n); 43. t1=time(0); 44. quicksort(x, 0, n-1); 45. t2=time(0); 46. printf("用时 %d 秒!", (int)(t2-t1)); 47. fclose(fp); 48. return 0; 49.}
总结:
通过此次实践我发现我的很多不足 对于关于编程的很多欠缺 在以后的时间里 要专项练习 不断加强