您的位置:首页 > 其它

关于O(n^2)复杂度的体验

2015-09-11 13:22 281 查看
/*
* Copyright (c) 2015, 烟台大学计算机与控制工程学院
* All rights reserved.
* 文件名称:cpp1.cpp
* 作者:巩凯强
* 完成日期:2015年9月11日
* 版本号:v6.0
*
* 问题描述:体验O(n^2)的复杂度
* 输入描述:无
* 程序输出:排序所需要的时间
*/

#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#define MAXNUM 100000
void selectsort(int a[], int n)
{
int i, j, k, tmp;
for(i = 0; i < n-1; i++)
{
k = i;
for(j = i+1; j < n; j++)
{
if(a[j] < a[k])
k = j;
}
if(k != j)
{
tmp = a[i];
a[i] = a[k];
a[k] = tmp;
}
}
}

int main()
{
int x[MAXNUM];
int n = 0;
double t1,t2;
FILE *fp;
fp = fopen("numbers.txt", "r");
if(fp==NULL)
{
printf("打开文件错!请下载文件,并将之复制到与源程序文件同一文件夹下。\n");
exit(1);
}
while(fscanf(fp, "%d", &x
)!=EOF)
n++;
printf("数据量:%d, 开始排序....", n);
t1=time(0);
selectsort(x, n);
t2=time(0);
printf("用时 %d 秒!", (int)(t2-t1));
fclose(fp);
return 0;
}


运行结果:



知识点总结:

本题主要是体验程序的复杂度问题,就该题而言,复杂度为O(n^2),因为采用选择排序,即循环套循环的结构,所以最高复杂度为n^2。

学习心得:

虽然一个题有多种解法,但是对于我们来说,写出的程序要具备效率高,用时短的特点,因此,这个题的方法并不是太好的。下一篇文章会有更好的方法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: