Share Pastebin
Guest
Public paste!

Untitled

By: a guest | Mar 21st, 2010 | Syntax: None | Size: 6.49 KB | Hits: 60 | Expires: Never
Copy text to clipboard
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <windows.h>
  4. #include <math.h>
  5. #include <process.h>
  6.  
  7. LARGE_INTEGER tick1, tick2, freq;
  8.  
  9. void Random(int Table[],int amount){
  10.      int i;
  11.      for(i = 0 ; i < amount ; ++i){
  12.            Table[i] = rand()+rand()+rand()+rand()+rand();
  13.            }
  14.      
  15.      }
  16.      
  17. void Swap(int Table[],int a,int b ){
  18.      int temp;
  19.      temp = Table[a];
  20.      Table[a] = Table[b];
  21.      Table[b] = temp;
  22.      }
  23.  
  24. int BubbleSort(int Table[],int amount)
  25.      {
  26.                 int i, j, x;
  27.                
  28.                 for(i = 1 ; i < amount ; i++){
  29.                       for(j = amount-1 ; j >= i ; j--){
  30.                             if( Table[j-1] > Table[j] ){
  31.                                 Swap(Table,j-1,j);
  32.                                 }
  33.                             }
  34.                       }            
  35.      }
  36.  
  37. void Heapify(int Table[], int i, int Heapsize)
  38.     {
  39.      int Left = 2 * i + 1 , Right = 2 * (i + 1) , Largest;
  40.      
  41.      if((Left < Heapsize) && (Table[Left] > Table[i]))    
  42.              {Largest = Left;}
  43.              else
  44.              {Largest = i;}
  45.      
  46.      if((Right < Heapsize) && (Table[Right] > Table[Largest]))
  47.               {Largest = Right;}
  48.      
  49.      if(Largest != i)
  50.                 {Swap(Table,i,Largest);
  51.                 Heapify(Table,Largest,Heapsize);}  
  52.     }  
  53.    
  54. void BuildHeap(int Table[],int amount)
  55.      {
  56.       int i;
  57.       int Heapsize = amount;
  58.       for(i = ceil((amount+1)/2-1); i >= 0; i--)
  59.             {
  60.             Heapify(Table,i, Heapsize);                
  61.             }          
  62.      }
  63.  
  64. int HeapSort(int Table[],int amount)
  65.     {
  66.      int i,Heapsize=amount;
  67.          
  68.      BuildHeap(Table, amount);
  69.      for(i = amount-1; i > 0 ; i--)
  70.            {
  71.                        Swap(Table,0,i);
  72.                        Heapsize--;
  73.                        Heapify(Table,0, Heapsize);
  74.            }
  75.    
  76.     }
  77.    
  78. int CountingSort(int Table[], int amount)
  79.     {
  80.                      
  81.       int i, k=32768*5;
  82.       int C[k], B[amount];
  83.       for(i=0;i<k;i++){
  84.                        C[i] = 0;}        
  85.       for(i=0;i<amount;i++){
  86.                            C[Table[i]-1]++;
  87.                            }
  88.       for(i=1;i<k;i++){
  89.                        C[i] += C[i-1];
  90.                        }
  91.       for(i=amount-1;i>=0;i--){
  92.                                      B[C[Table[i]-1]-1] = Table[i];
  93.                                      C[Table[i]-1]--;
  94.                     }
  95.     for(i=0;i<amount;i++){Table[i]=B[i];}
  96.     }
  97.    
  98. int ShellSort(int Table[], int amount)
  99.     {
  100.     int i, j, k, x, m, t,l;
  101.     double g = log10(amount);
  102.     t= floor(g);
  103.     int h[t];
  104.     for(i=0;i<t;i++){h[i]=3*i+1;}        
  105.     for(m=0;m<t;m++){
  106.                      k=h[m];
  107.                      for(i=k;i<amount;i++){
  108.                                          x=Table[i];
  109.                                          j=i-k;
  110.                                          while((x<Table[j])&&((j+k)<amount)){  
  111.                                                        Table[j+k] = Table[j];
  112.                                                        j = j-k;
  113.                                                                                                               }
  114.                                          Table[j+k] = x;
  115.                                          }
  116.                      }      
  117.     }
  118.    
  119.        
  120.  
  121. int main(int argc, char *argv[])
  122. {
  123.     int amount, Table[150000], i,j;
  124.     float Results[5][34];
  125.      QueryPerformanceFrequency(&freq);          
  126.     srand( (unsigned)time( NULL ) );
  127.    
  128.     for(i=0;i<=20;i++){Results[0][i]=1000*i;}
  129.     for(i=21;i<=33;i++){Results[0][i]=10000*(i-18);}
  130.    
  131.     for(i=0;i<=20;i++){
  132.                        amount = i*1000;
  133.                        int Table1[amount];
  134.                        Random(Table,amount);
  135.                        for(j=0;j<amount;j++){Table1[j]=Table[j];}
  136.                        
  137.                        QueryPerformanceCounter( &tick1 );
  138.                        BubbleSort(Table,amount);
  139.                        QueryPerformanceCounter( &tick2 );
  140.                        Results[1][i]=1000*( tick2.QuadPart - tick1.QuadPart ) / (float) (freq.QuadPart );
  141.                        
  142.                        for(j=0;j<amount;j++){Table[j]=Table1[j];}
  143.                        QueryPerformanceCounter( &tick1 );
  144.                        HeapSort(Table,amount);
  145.                        QueryPerformanceCounter( &tick2 );
  146.                        Results[2][i]=1000* ( tick2.QuadPart - tick1.QuadPart ) / (float) (freq.QuadPart );
  147.                        
  148.                        for(j=0;j<amount;j++){Table[j]=Table1[j];}
  149.                        QueryPerformanceCounter( &tick1 );
  150.                        CountingSort(Table,amount);
  151.                        QueryPerformanceCounter( &tick2 );
  152.                        Results[3][i]=1000* ( tick2.QuadPart - tick1.QuadPart ) / (float) (freq.QuadPart );
  153.                        
  154.                        for(j=0;j<amount;j++){Table[j]=Table1[j];}
  155.                        QueryPerformanceCounter( &tick1 );
  156.                        ShellSort(Table,amount);
  157.                        QueryPerformanceCounter( &tick2 );
  158.                        Results[4][i]=1000* ( tick2.QuadPart - tick1.QuadPart ) / (float) (freq.QuadPart );  
  159.                        }
  160.                        
  161.         for(i=3;i<=15;i++){
  162.                        amount = i*10000;
  163.                        Random(Table,amount);
  164.                                              
  165.                        QueryPerformanceCounter( &tick1 );
  166.                        HeapSort(Table,amount);
  167.                        QueryPerformanceCounter( &tick2 );
  168.                        Results[2][i+18]=1000* ( tick2.QuadPart - tick1.QuadPart ) / (float) (freq.QuadPart );
  169.                        
  170.                        Random(Table,amount);
  171.                        QueryPerformanceCounter( &tick1 );
  172.                        CountingSort(Table,amount);
  173.                        QueryPerformanceCounter( &tick2 );
  174.                        Results[3][i+18]=1000* ( tick2.QuadPart - tick1.QuadPart ) / (float) (freq.QuadPart );
  175.                        
  176.                        Results[1][i+18]=0;
  177.                        Results[4][i+18]=0;
  178.                        }
  179.                        
  180.     printf("\tBS\t\tHS\t\tCS\t\tShS\n");  
  181.     for(i=0;i<=33;i++){printf("%.0f\t%f\t%f\t%f\t%f\n",Results[0][i],Results[1][i],Results[2][i],Results[3][i],Results[4][i]);}          
  182.     system("pause");
  183.   return 0;
  184. }