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

/* 
* 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[n])!=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)复杂度的体验_第1张图片

知识点总结:

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

学习心得:

虽然一个题有多种解法,但是对于我们来说,写出的程序要具备效率高,用时短的特点,因此,这个题的方法并不是太好的。下一篇文章会有更好的方法。

你可能感兴趣的:(排序,函数,计算机,C语言)