您的位置:首页 > 理论基础 > 数据结构算法

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

2015-05-30 13:38 423 查看
P1.1 选择问题,选择出第K大的数,并画出N为不同值的运行时间,K=N/2

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

// P1_1.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <malloc.h>
#include <stdlib.h>
#include <time.h>

void swap(int& a,int& b);

int main(int argc, char* argv[])
{

int N = 40000;
int k = N/2;
int i,j;

//动态数组
int *dynArr = (int *)malloc(N * sizeof(int));
//生成随机数组
srand((unsigned) time(NULL));
//printf("%d%c", rand(),'\t');
for(i=0; i<N;i++)
{
dynArr[i] = rand()%100;
//printf("%d%c",dynArr[i],'\t');
}

int beginTime = clock();//计时开始

//冒泡排序
int temp = 0;
for(i=0;i<N;i++)
for(j=0;j<N;j++)
{
if(dynArr[i]>dynArr[j]){    //左>右,交换
swap(dynArr[i],dynArr[j]);
}
}//第一层结束,最大数在最右

int endTime = clock();//计时结束
int runningTime = endTime - beginTime;//算出来的单位是毫秒

for(i=0; i<N;i++){
//     dynArr[i] = rand()%100;
//printf("%d%c",dynArr[i],'\t');
}

char str1[] = "个数中第k大的数:";
char str2[] = "运行时间(毫秒):";
printf("\n%d%s%d\t",N,str1,dynArr[k]);
printf("\n%s%d\n",str2,runningTime);

return 0;
}

void swap(int& left,int& right){
int temp;
temp = left;
left = right;
right = temp;
}


更改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

这个网站绘制曲线图:



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





人数是普通的递增,但是时间可不是递增,时间花费是迅速上升的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: