选择排序与快速排序

选择排序与快速排序对比
  1. /*  
  2. 烟台大学计算机学院  
  3.   
  4. 文件名称:lsy.cpp  
  5.   
  6. 作者:刘思源  
  7.   
  8. 完成日期:2017年9月13日  
  9.   
  10. 问题描述:选择排序与快速排序差别 
  11.   
  12.  
  13.   
  14. */   
  15.   
  16. //选择排序:  
  17.   
    1. #include <stdio.h>  
    2. #include <time.h>  
    3. #include <stdlib.h>  
    4. #define MAXNUM 100000  
    5. void selectsort(int a[], int n)  
    6. {  
    7.         int i, j, k, tmp;  
    8.         for(i = 0; i < n-1; i++)  
    9.         {  
    10.                 k = i;  
    11.                 for(j = i+1; j < n; j++)  
    12.                 {  
    13.                         if(a[j] < a[k])  
    14.                                 k = j;  
    15.                 }  
    16.                 if(k != j)  
    17.                 {  
    18.                         tmp = a[i];  
    19.                         a[i] = a[k];  
    20.                         a[k] = tmp;  
    21.                 }  
    22.         }  
    23. }  
    24.   
    25. int main()  
    26. {  
    27.     int x[MAXNUM];  
    28.     int n = 0;  
    29.     double t1,t2;  
    30.     FILE *fp;  
    31.     fp = fopen("numbers.txt""r");  
    32.     if(fp==NULL)  
    33.     {  
    34.         printf("打开文件错!请下载文件,并将之复制到与源程序文件同一文件夹下。\n");  
    35.         exit(1);  
    36.     }  
    37.     while(fscanf(fp, "%d", &x[n])!=EOF)  
    38.         n++;  
    39.     printf("数据量:%d, 开始排序....", n);  
    40.     t1=time(0);  
    41.     selectsort(x, n);  
    42.     t2=time(0);  
    43.     printf("用时 %d 秒!", (int)(t2-t1));  
    44.     fclose(fp);  
    45.     return 0;  
    46. }  
    47.   
    48. //快速排序:  
    49.   
    50. #include <stdio.h>  
    51. #include <time.h>  
    52. #include <stdlib.h>  
    53. #define MAXNUM 100000  
    54. void quicksort(int data[],int first,int last)  
    55. {  
    56.     int i, j, t, base;  
    57.     if (first>last)  
    58.         return;  
    59.     base=data[first];   
    60.     i=first;  
    61.     j=last;  
    62.     while(i!=j)   
    63.     {  
    64.         while(data[j]>=base && i<j)   
    65.             j--;  
    66.         while(data[i]<=base && i<j)   
    67.             i++;  
    68.         /*交换两个数*/  
    69.         if(i<j)  
    70.         {  
    71.             t=data[i];  
    72.             data[i]=data[j];  
    73.             data[j]=t;  
    74.         }  
    75.     }  
    76.     data[first]=data[i];   
    77.     data[i]=base;   
    78.     quicksort(data,first,i-1);  
    79.     quicksort(data,i+1,last);   
    80. }  
    81.   
    82. int main()  
    83. {  
    84.     int x[MAXNUM];  
    85.     int n = 0;  
    86.     double t1,t2;  
    87.     FILE *fp;  
    88.     fp = fopen("numbers.txt""r");  
    89.     if(fp==NULL)  
    90.     {  
    91.         printf("打开文件错!请下载文件,并将之复制到与源程序文件同一文件夹下。\n");  
    92.         exit(1);  
    93.     }      
    94.     while(fscanf(fp, "%d", &x[n])!=EOF)  
    95.         n++;  
    96.     printf("数据量:%d, 开始排序....", n);  
    97.     t1=time(0);  
    98.     quicksort(x, 0, n-1);  
    99.     t2=time(0);  
    100.     printf("用时 %d 秒!", (int)(t2-t1));  
    101.     fclose(fp);  
    102.     return 0;  
    103. }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值