中央論壇 - CENTER BBS

標題: 內部搜尋法 [打印本頁]

作者: f66666602    時間: 2007-8-13 02:15
標題: 內部搜尋法
以下的程式包含四種內部搜尋法:Bubble Sort、Selection Sort、Insertion Sort、Quick Sort

程式開始會先以亂數產生十萬個數字
( #define _mexlen 100000 )
並讓使用者選擇排序使用的搜尋法

另外
因數字過多
排序的結果沒有印出
但是可以自己把 out(copy) 前面的註解拿掉

排序時
程式會自動紀錄系統時間
在排序後顯示花掉的時間
方便大家比較各種排序法的快慢

語言:C 語言
編譯器: DevC++ 4.9.9.2
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>

  4. #define _maxlen 100000

  5. void out(int* in){
  6.   int a;
  7.   for(a=0;a<_maxlen;a++){
  8.     printf("%4d",in[a]);
  9.     if(a%19==18)
  10.       printf("\n");
  11.   }
  12. }

  13. void selectionSort(int* in){
  14.   int a=0,b=0,min=0,tmp=0;;
  15.   for(a=0;a<_maxlen;a++){
  16.     for(b=a;b<_maxlen;b++){
  17.       if(in[b]<in[min])
  18.         min = b;
  19.     }
  20.     tmp = in[a];
  21.     in[a] = in[min];
  22.     in[min] = tmp;
  23.   }
  24. }


  25. void insertionSort(int* in)
  26. {
  27.   int first=0,last=_maxlen-1;
  28.   int i,j,a;
  29.   int temp;
  30.   for (i = first+1; i<=last;i++){
  31.   temp = in[i];
  32.     j=i-1;
  33.     while((j>=first) && (in[j] > temp)){
  34.       in[j+1] = in[j];
  35.       j--;
  36.     }
  37.     in[j+1] = temp;     
  38.   }
  39. }


  40. void bubbleSort(int* in){
  41.   int a=0,b=0,tmp=0;
  42.   for(a=0;a<_maxlen;a++){
  43.     for(b=0;b<_maxlen-1;b++){
  44.       if(in[b]>in[b+1]){
  45.         tmp = in[b];
  46.         in[b] = in[b+1];
  47.         in[b+1] = tmp;
  48.       }
  49.     }
  50.   }
  51. }

  52. void swap(int *a, int *b)
  53. {
  54. int t=*a; *a=*b; *b=t;
  55. }

  56. void quickSort(int number[], int left, int right) {
  57.   int i, j, s;

  58.   if(left < right) {
  59.     s = number[left];
  60.     i = left;
  61.     j = right + 1;

  62.     while(1) {
  63.         // &brvbar;V&yen;k§&auml;
  64.         while(i + 1 < _maxlen && number[++i] < s) ;
  65.         // &brvbar;V&yen;&ordf;§&auml;
  66.         while(j -1 > -1 && number[--j] > s) ;
  67.         if(i >= j)
  68.           break;
  69.         swap(&number[i], &number[j]);
  70.     }

  71.     number[left] = number[j];
  72.     number[j] = s;

  73.     quickSort(number, left, j-1);
  74.     quickSort(number, j+1, right);
  75.   }
  76. }


  77. int main(){
  78.   int array[_maxlen];
  79.   int copy[_maxlen];
  80.   int a=0,b=0;
  81.   int selection=0;
  82.   int run=1;
  83.   srand(time(NULL));
  84.   clock_t start, finish;
  85.   
  86.   for(a=0;a<_maxlen;a++){
  87.     array[a]=(rand()+1)%100;
  88.     copy[a] = array[a];
  89.   }
  90.   
  91.   for(a=0;a<_maxlen;a++){
  92.     printf("%4d",array[a]);
  93.     if(a%19==18)
  94.       printf("\n");
  95.   }
  96.   
  97.   while( run==1 ){
  98.    
  99.     for(a=0;a<_maxlen;a++)
  100.       copy[a]=array[a];
  101.       
  102.     printf("\n\n(1)Selection sort\n(2)Insertion sort\n(3)Bubble sort\n(4)Quick Sort\n(5)Quit\n");
  103.     printf("\nEnter your choise:");
  104.     scanf("%d",&selection);
  105.   

  106.     switch(selection){
  107.       case 1:
  108.         start = clock();
  109.         selectionSort(copy);
  110.         finish = clock();
  111.         //out(copy);
  112.         printf("\n\n費時:%.3f\n",(double)(finish - start) / CLOCKS_PER_SEC );
  113.         break;
  114.       case 2:
  115.         start = clock();
  116.         insertionSort(copy);
  117.         finish = clock();
  118.         //out(copy);
  119.         printf("\n\n費時:%.3f\n",(double)(finish - start) / CLOCKS_PER_SEC );
  120.         break;
  121.       case 3:
  122.         start = clock();
  123.         bubbleSort(copy);
  124.         finish = clock();
  125.         //out(copy);
  126.         printf("\n\n費時:%.3f\n",(double)(finish - start) / CLOCKS_PER_SEC );
  127.         break;
  128.       case 4:
  129.         start = clock();
  130.         quickSort(copy, 0, _maxlen-1);
  131.         finish = clock();
  132.         //out(copy);
  133.         printf("\n\n費時:%.3f\n",(double)(finish - start) / CLOCKS_PER_SEC );
  134.         break;
  135.       default:
  136.         run=0;
  137.         break;
  138.     }
  139.   }
  140.   
  141.   printf("\n\n");
  142.   return 0;
  143. }


複製代碼








歡迎光臨 中央論壇 - CENTER BBS (https://www.centerbbs.com/) Powered by Discuz! X3