100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > 数据结构与算法分析——C语言描述

数据结构与算法分析——C语言描述

时间:2021-09-08 14:40:36

相关推荐

数据结构与算法分析——C语言描述

P1.1 选择问题,选择出第K大的数,并画出N为不同值的运行时间,K=N/2

毕业两年半,重写排序,感觉良好。代码使用冒泡排序,库函数clock计算大致运行时间。

1 // P1_1.cpp : Defines the entry point for the console application. 2 // 3 4 #include "stdafx.h" 5 #include <malloc.h> 6 #include <stdlib.h> 7 #include <time.h> 8 9 void swap(int& a,int& b);10 11 int main(int argc, char* argv[])12 {13 14int N = 40000;15int k = N/2;16int i,j;17 18//动态数组19int *dynArr = (int *)malloc(N * sizeof(int));20//生成随机数组21srand((unsigned) time(NULL));22//printf("%d%c", rand(),'\t');23for(i=0; i<N;i++)24{25dynArr[i] = rand()%100;26//printf("%d%c",dynArr[i],'\t');27}28 29 30int beginTime = clock();//计时开始31 32//冒泡排序33int temp = 0;34for(i=0;i<N;i++)35 for(j=0;j<N;j++)36 {37 if(dynArr[i]>dynArr[j]){ //左>右,交换38 swap(dynArr[i],dynArr[j]);39 } 40 }//第一层结束,最大数在最右41 42int endTime = clock();//计时结束43int runningTime = endTime - beginTime;//算出来的单位是毫秒44 45 46 47for(i=0; i<N;i++){48//dynArr[i] = rand()%100;49//printf("%d%c",dynArr[i],'\t');50}5152char str1[] = "个数中第k大的数:";53char str2[] = "运行时间(毫秒):";54printf("\n%d%s%d\t",N,str1,dynArr[k]);55 printf("\n%s%d\n",str2,runningTime);56 57 58return 0;59 }60 61 void swap(int& left,int& right){62int temp;63temp = left;64left = right;65right = temp;66 }

更改N值,来测试不同样本值的运行时间。

假如数据是学生的一个科目的考试成绩,百分制。N表示学生的个数。

N Time(ms)

0 0

50 1

100 5

500 49

1000 101

5000 272

N(万) Time(ms)

1 281

2 1109

3 2506

4 4384

5 6764

6 9747

7 13296

8 17421

9 22078

10 27307

用这个网站绘制曲线图:

感觉就是个递增。其实这是假象...再看这两个小图:

人数是普通的递增,但是时间可不是递增,时间花费是迅速上升的。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。