关于O(nlogn)复杂度的体验

/* 
* Copyright (c) 2015, 烟台大学计算机与控制工程学院 
* All rights reserved. 
* 文件名称:a.cpp
* 作者:巩凯强 
* 完成日期:2015年9月11日 
* 版本号:v6.0 
* 
* 问题描述:关于O(nlogn)复杂度的体验 
* 输入描述:无  
* 程序输出:排序用的时间 
*/

#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#define MAXNUM 100000
void quicksort(int data[],int first,int last)
{
    int i, j, t, base;
    if (first>last)
        return;
    base=data[first]; 
    i=first;
    j=last;
    while(i!=j) 
    {
        while(data[j]>=base && i<j) 
            j--;
        while(data[i]<=base && i<j) 
            i++;
       
        if(i<j)
        {
            t=data[i];
            data[i]=data[j];
            data[j]=t;
        }
    }
    data[first]=data[i]; 
    data[i]=base; 
    quicksort(data,first,i-1);
    quicksort(data,i+1,last); 
}

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);
    quicksort(x, 0, n-1);
    t2=time(0);
    printf("用时 %d 秒!", (int)(t2-t1));
    fclose(fp);
    return 0;
}


运行结果:

知识点总结:

因为有while(i!=j),所以复杂度是n(logn)型的,本题采用快速排序的方法,所以用时比较短。

学习心得:

通过与上一篇文章的对比,显而易见,本篇文章用时比较短,因此我们对于排序问题的话,要采用这种快速排序的方法。

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