Share Pastebin
Guest
Public paste!

Untitled

By: a guest | Mar 21st, 2010 | Syntax: None | Size: 15.56 KB | Hits: 57 | Expires: Never
Copy text to clipboard
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. #include <windows.h>
  5. #include <process.h>
  6.  
  7. LARGE_INTEGER tick1, tick2, freq;
  8.  
  9.  
  10. void Swap(int Table[],int a,int b ){ //Wymiana
  11.      int temp;
  12.      temp = Table[a];
  13.      Table[a] = Table[b];
  14.      Table[b] = temp;
  15.      }
  16.  
  17. void Random(int Table[],int amount)//Generator -> Losowe
  18.      {
  19.                 int i;
  20.                 for(i=0;i<amount;i++){Table[i]=rand();}      
  21.      }
  22.      
  23. void Upper(int Table[], int amount)// Generator -> Rosnące
  24.      {
  25.      int i;
  26.      for(i=0;i<amount;i++){Table[i]=i;}          
  27.      }
  28.      
  29. void Lower(int Table[], int amount)//Generator -> Malejące
  30.      {
  31.      int i;
  32.      for(i=0;i<amount;i++){Table[i]=amount-i;}          
  33.      }
  34.      
  35. void Still(int Table[], int amount)// Generator -> Stałe
  36.      {
  37.      int i;
  38.      for(i=amount-1;i>=0;i--){Table[i]=2;}          
  39.      }
  40.  
  41. void AShape(int Table[], int amount)//Generator -> Rosnąco-malejące
  42.      {
  43.      int i;
  44.      for(i=0;i<=(amount-1)/2;i++){Table[i]=2*i;}
  45.      for(i=(amount-1)/2+1;i<amount;i++){Table[i]=Table[(amount-i-1)]-1;}        
  46.      }
  47.      
  48. void VShape(int Table[], int amount)//Generator -> Malejąco-rosnące
  49.      {
  50.      int i;
  51.      for(i=0;i<=(amount-1)/2;i++){Table[i]=-2*i+amount;}
  52.      for(i=(amount-1)/2+1;i<amount;i++){Table[i]=Table[(amount-i-1)]+1;}          
  53.      }
  54.      
  55.      
  56. void QSort(int Table[],int amount, int l, int p) // implementacja z Wirth-a
  57.     {
  58.               int i, j, x, w,a;
  59.               i=l;
  60.               j=p;
  61.               x=Table[(l+p)/2];
  62.               do{
  63.                  while(Table[i]<x){i++;}
  64.                  while(x<Table[j]){j--;}              
  65.                  if(i<=j){
  66.                           Swap(Table,i,j);
  67.                           i++;
  68.                           j--;
  69.                           }
  70.               }while(i<=j);
  71.               if(l<j){QSort(Table,amount,l,j);}
  72.               if(i<p){QSort(Table,amount,i,p);}
  73.     }
  74.  
  75. void Merge(int low,int mid,int high,int Table[],int amount){
  76.  int h,i,j,b[amount],k;
  77.  
  78.  h=low;
  79.  i=low;
  80.  j=mid+1;
  81.  
  82.  while((h<=mid)&&(j<=high))
  83.                            {
  84.                            if(Table[h]<=Table[j])
  85.                                                  {
  86.                                                   b[i]=Table[h];
  87.                                                   h++;
  88.                                                   }
  89.                            else
  90.                                {
  91.                                 b[i]=Table[j];
  92.                                 j++;
  93.                                 }
  94.                            i++;
  95.                            }
  96.  if(h>mid)
  97.           {
  98.            for(k=j;k<=high;k++)
  99.                                {
  100.                                 b[i]=Table[k];
  101.                                 i++;
  102.                                 }
  103.           }
  104.  else
  105.      {
  106.       for(k=h;k<=mid;k++)
  107.                          {
  108.                           b[i]=Table[k];
  109.                           i++;
  110.                           }
  111.       }
  112.  for(k=low;k<=high;k++)
  113.                         Table[k]=b[k];
  114. }
  115.  
  116. void MergeSort(int Table[],int amount,int low,int high)
  117. {
  118.  int mid;
  119.   if(low<high)
  120.                {
  121.                 mid=(low+high)/2;
  122.                 MergeSort(Table,amount,low,mid);
  123.                 MergeSort(Table,amount,mid+1,high);
  124.                 Merge(low,mid,high,Table,amount);
  125.                 }
  126. }
  127.  
  128.  
  129. void Heapify(int Table[], int i, int Heapsize)
  130.     {
  131.      int Left = 2 * i + 1 , Right = 2 * (i + 1) , Largest;
  132.      
  133.      if((Left < Heapsize) && (Table[Left] > Table[i]))    
  134.              {Largest = Left;}
  135.              else
  136.              {Largest = i;}
  137.      
  138.      if((Right < Heapsize) && (Table[Right] > Table[Largest]))
  139.               {Largest = Right;}
  140.      
  141.      if(Largest != i)
  142.                 {Swap(Table,i,Largest);
  143.                 Heapify(Table,Largest,Heapsize);}  
  144.     }  
  145.    
  146. void BuildHeap(int Table[],int amount)
  147.      {
  148.       int i;
  149.       int Heapsize = amount;
  150.       for(i = ceil((amount+1)/2-1); i >= 0; i--)
  151.             {
  152.             Heapify(Table,i, Heapsize);                
  153.             }          
  154.      }
  155.  
  156. void HeapSort(int Table[],int amount)
  157.     {
  158.      int i,Heapsize=amount;    
  159.      
  160.      BuildHeap(Table, amount);
  161.      for(i = amount-1; i > 0 ; i--)
  162.            {
  163.                        Swap(Table,0,i);
  164.                        Heapsize--;
  165.                        Heapify(Table,0, Heapsize);
  166.            }
  167.    
  168.     }
  169.  
  170. int main(int argc, char *argv[])
  171. {
  172.   int i, Table[200000], amount;
  173.   float Results;
  174.   int *Table1 = (int*)malloc(200000 * sizeof(int));
  175.   QueryPerformanceFrequency(&freq);
  176.   srand ( time(NULL) );
  177.   printf("Random\n");
  178.   printf("QS\n");
  179.   Random(Table,150000);
  180.   for(i=0;i<150000;i++){Table1[i]=Table[i];}
  181.   for(amount=0;amount<=150000;amount+=10000){ //Random
  182.                                          
  183.                                           QueryPerformanceCounter(&tick1);
  184.                                           QSort(Table,amount,0,amount-1);
  185.                                           QueryPerformanceCounter(&tick2);
  186.                                            printf("%d\t",amount);
  187.                                            printf( "%f\n",1000* ( tick2.QuadPart - tick1.QuadPart ) / (float) freq.QuadPart );
  188.                                            for(i=0;i<150000;i++){Table[i]=Table1[i];}
  189.                                           }  
  190.   printf("HS\n");
  191.   for(amount=0;amount<=150000;amount+=10000){
  192.                                           QueryPerformanceCounter(&tick1);
  193.                                           HeapSort(Table,amount);
  194.                                           QueryPerformanceCounter(&tick2);
  195.                                            printf("%d\t",amount);
  196.                                            printf( "%f\n",1000* ( tick2.QuadPart - tick1.QuadPart ) / (float) freq.QuadPart );
  197.                                            for(i=0;i<150000;i++){Table[i]=Table1[i];}  
  198.                                           }
  199.   free(Table1);
  200.   printf("MS\n");
  201.   for(amount=0;amount<=150000;amount+=10000){
  202.                                           QueryPerformanceCounter(&tick1);
  203.                                           MergeSort(Table,amount,0,amount-1);
  204.                                           QueryPerformanceCounter(&tick2);
  205.                                            printf("%d\t",amount);
  206.                                            printf( "%f\n",1000* ( tick2.QuadPart - tick1.QuadPart ) / (float) freq.QuadPart );
  207.                                           }  
  208.   printf("Still\n");
  209.   printf("QS\n");
  210.   for(amount=0;amount<=150000;amount+=10000){ //Still
  211.                                           Still(Table,amount);
  212.                                           QueryPerformanceCounter(&tick1);
  213.                                           QSort(Table,amount,0,amount-1);
  214.                                           QueryPerformanceCounter(&tick2);
  215.                                            printf("%d\t",amount);
  216.                                            printf( "%f\n",1000* ( tick2.QuadPart - tick1.QuadPart ) / (float) freq.QuadPart );
  217.                                           }  
  218.   printf("HS\n");
  219.   for(amount=0;amount<=150000;amount+=10000){
  220.                                           Still(Table,amount);
  221.                                           QueryPerformanceCounter(&tick1);
  222.                                           HeapSort(Table,amount);
  223.                                           QueryPerformanceCounter(&tick2);
  224.                                            printf("%d\t",amount);
  225.                                            printf( "%f\n",1000* ( tick2.QuadPart - tick1.QuadPart ) / (float) freq.QuadPart );
  226.                                           }  
  227.   printf("MS\n");
  228.   for(amount=0;amount<=150000;amount+=10000){
  229.                                           Still(Table,amount);
  230.                                           QueryPerformanceCounter(&tick1);
  231.                                           MergeSort(Table,amount,0,amount-1);
  232.                                           QueryPerformanceCounter(&tick2);
  233.                                            printf("%d\t",amount);
  234.                                            printf( "%f\n",1000* ( tick2.QuadPart - tick1.QuadPart ) / (float) freq.QuadPart );
  235.                                           }  
  236.   printf("Upper\n");  
  237.   printf("QS\n");
  238.   for(amount=0;amount<=150000;amount+=10000){//Upper
  239.                                           Upper(Table,amount);
  240.                                           QueryPerformanceCounter(&tick1);
  241.                                           QSort(Table,amount,0,amount-1);
  242.                                           QueryPerformanceCounter(&tick2);
  243.                                            printf("%d\t",amount);
  244.                                            printf( "%f\n",1000* ( tick2.QuadPart - tick1.QuadPart ) / (float) freq.QuadPart );
  245.                                           }  
  246.   printf("HS\n");
  247.   for(amount=0;amount<=150000;amount+=10000){
  248.                                           Upper(Table,amount);
  249.                                           QueryPerformanceCounter(&tick1);
  250.                                           HeapSort(Table,amount);
  251.                                           QueryPerformanceCounter(&tick2);
  252.                                            printf("%d\t",amount);
  253.                                            printf( "%f\n",1000* ( tick2.QuadPart - tick1.QuadPart ) / (float) freq.QuadPart );
  254.                                           }  
  255.   printf("MS\n");
  256.   for(amount=0;amount<=150000;amount+=10000){
  257.                                           Upper(Table,amount);
  258.                                           QueryPerformanceCounter(&tick1);
  259.                                           MergeSort(Table,amount,0,amount-1);
  260.                                           QueryPerformanceCounter(&tick2);
  261.                                            printf("%d\t",amount);
  262.                                            printf( "%f\n",1000* ( tick2.QuadPart - tick1.QuadPart ) / (float) freq.QuadPart );
  263.                                           }  
  264.   printf("Lower\n");  
  265.   printf("QS\n");
  266.   for(amount=0;amount<=150000;amount+=10000){//Lower
  267.                                           Lower(Table,amount);
  268.                                           QueryPerformanceCounter(&tick1);
  269.                                           QSort(Table,amount,0,amount-1);
  270.                                           QueryPerformanceCounter(&tick2);
  271.                                            printf("%d\t",amount);
  272.                                            printf( "%f\n",1000* ( tick2.QuadPart - tick1.QuadPart ) / (float) freq.QuadPart );
  273.                                           }  
  274.   printf("HS\n");
  275.   for(amount=0;amount<=150000;amount+=10000){
  276.                                           Lower(Table,amount);
  277.                                           QueryPerformanceCounter(&tick1);
  278.                                           HeapSort(Table,amount);
  279.                                           QueryPerformanceCounter(&tick2);
  280.                                            printf("%d\t",amount);
  281.                                            printf( "%f\n",1000* ( tick2.QuadPart - tick1.QuadPart ) / (float) freq.QuadPart );
  282.                                           }
  283.   printf("MS\n");
  284.   for(amount=0;amount<=150000;amount+=10000){
  285.                                           Lower(Table,amount);
  286.                                           QueryPerformanceCounter(&tick1);
  287.                                           MergeSort(Table,amount,0,amount-1);
  288.                                           QueryPerformanceCounter(&tick2);
  289.                                            printf("%d\t",amount);
  290.                                            printf( "%f\n",1000* ( tick2.QuadPart - tick1.QuadPart ) / (float) freq.QuadPart );
  291.                                           }  
  292.   printf("AShape\n");  
  293.   printf("QS\n");
  294.   for(amount=0;amount<=150000;amount+=10000){//AShape
  295.                                           AShape(Table,amount);
  296.                                           QueryPerformanceCounter(&tick1);
  297.                                           QSort(Table,amount,0,amount-1);
  298.                                           QueryPerformanceCounter(&tick2);
  299.                                            printf("%d\t",amount);
  300.                                            printf( "%f\n",1000* ( tick2.QuadPart - tick1.QuadPart ) / (float) freq.QuadPart );
  301.                                           }  
  302.   printf("HS\n");
  303.   for(amount=0;amount<=150000;amount+=10000){
  304.                                           AShape(Table,amount);
  305.                                           QueryPerformanceCounter(&tick1);
  306.                                           HeapSort(Table,amount);
  307.                                           QueryPerformanceCounter(&tick2);
  308.                                            printf("%d\t",amount);
  309.                                            printf( "%f\n",1000* ( tick2.QuadPart - tick1.QuadPart ) / (float) freq.QuadPart );
  310.                                           }
  311.   printf("MS\n");
  312.   for(amount=0;amount<=150000;amount+=10000){
  313.                                           AShape(Table,amount);
  314.                                           QueryPerformanceCounter(&tick1);
  315.                                           MergeSort(Table,amount,0,amount-1);
  316.                                           QueryPerformanceCounter(&tick2);
  317.                                            printf("%d\t",amount);
  318.                                            printf( "%f\n",1000* ( tick2.QuadPart - tick1.QuadPart ) / (float) freq.QuadPart );
  319.                                           }  
  320.   printf("VShape\n");
  321.   printf("QS\n");
  322.     for(amount=0;amount<=150000;amount+=10000){//VShape
  323.                                           VShape(Table,amount);
  324.                                           QueryPerformanceCounter(&tick1);
  325.                                           QSort(Table,amount,0,amount-1);
  326.                                           QueryPerformanceCounter(&tick2);
  327.                                            printf("%d\t",amount);
  328.                                            printf( "%f\n",1000* ( tick2.QuadPart - tick1.QuadPart ) / (float) freq.QuadPart );
  329.                                           }  
  330.   printf("HS\n");
  331.   for(amount=0;amount<=150000;amount+=10000){
  332.                                           VShape(Table,amount);
  333.                                           QueryPerformanceCounter(&tick1);
  334.                                           HeapSort(Table,amount);
  335.                                           QueryPerformanceCounter(&tick2);
  336.                                            printf("%d\t",amount);
  337.                                            printf( "%f\n",1000* ( tick2.QuadPart - tick1.QuadPart ) / (float) freq.QuadPart );
  338.                                           }
  339.   printf("MS\n");
  340.   for(amount=0;amount<=150000;amount+=10000){
  341.                                           VShape(Table,amount);
  342.                                           QueryPerformanceCounter(&tick1);
  343.                                           MergeSort(Table,amount,0,amount-1);
  344.                                           QueryPerformanceCounter(&tick2);
  345.                                            printf("%d\t",amount);
  346.                                            printf( "%f\n",1000* ( tick2.QuadPart - tick1.QuadPart ) / (float) freq.QuadPart );
  347.                                           }    
  348.   system("PAUSE");     
  349.   return 0;
  350. }