第二周实践项目(3)~体验复杂度

来源:互联网 发布:手机淘宝没有实名认证 编辑:程序博客网 时间:2024/06/06 12:30

两种函数的运行时间:

 (一):   

<span style="font-size:12px;color:#000000;">#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");      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;  }  </span>


(二)

01.#include <stdio.h>   02.#include <time.h>   03.#include <stdlib.h>   04.#define MAXNUM 100000   05.void quicksort(int data[],int first,int last)  06.{  07.    int i, j, t, base;  08.    if (first>last)  09.        return;  10.    base=data[first];  11.    i=first;  12.    j=last;  13.    while(i!=j)  14.    {  15.        while(data[j]>=base && i<j)  16.            j--;  17.        while(data[i]<=base && i<j)  18.            i++;  19.        /*交换两个数*/  20.        if(i<j)  21.        {  22.            t=data[i];  23.            data[i]=data[j];  24.            data[j]=t;  25.        }  26.    }  27.    data[first]=data[i];  28.    data[i]=base;  29.    quicksort(data,first,i-1);  30.    quicksort(data,i+1,last);  31.}  32.  33.int main()  34.{  35.    int x[MAXNUM];  36.    int n = 0;  37.    double t1,t2;  38.    FILE *fp;  39.    fp = fopen("numbers.txt", "r");  40.    while(fscanf(fp, "%d", &x[n])!=EOF)  41.        n++;  42.    printf("数据量:%d, 开始排序....", n);  43.    t1=time(0);  44.    quicksort(x, 0, n-1);  45.    t2=time(0);  46.    printf("用时 %d 秒!", (int)(t2-t1));  47.    fclose(fp);  48.    return 0;  49.}  


由结果看,第二个明显快于第一个,原因是第一个是呈指数性增长,第二个是呈线性增长。

由此可以注意以后变成复杂度的意义。

0 0
原创粉丝点击