Advertisement
Guest User

Untitled

a guest
Oct 23rd, 2016
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 16.32 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <stdlib.h>
  4. #include <time.h>
  5. #include <cstdlib>
  6. #include <cstdio>
  7. #include <fstream>
  8.  
  9. using namespace std;
  10.  
  11. template<class T>
  12.  class kopiec{
  13.        public:
  14.                
  15.        T *tab;
  16.        int size_;
  17.        int n;
  18.        
  19.        kopiec(){
  20.             size_=10000000;
  21.             n=0;
  22.             tab = new T[size_];
  23.            
  24.             }
  25.        ~kopiec(){}
  26.        
  27.        void push(T el){
  28.               tab[n+1]=el;
  29.               int tmp=n+1;
  30.              while (tmp!=1){
  31.                    if(tab[tmp/2] < tab[tmp]){
  32.                                  swap(tab[tmp/2],tab[tmp]);
  33.                                  tmp=tmp/2;
  34.                                  }
  35.                    else break;
  36.                    }
  37.              n++;
  38.              }
  39.        
  40.        
  41.             T pull(){
  42.             cout<<tab[1]<<" ";
  43.                  tab[1] = tab[n];
  44.                  n--;
  45.                  int i=1;
  46.                  
  47.                  while(i*2 <= n){
  48.                            if(tab[i]<tab[i*2] || tab[i] < tab[i*2+1]){
  49.                                   if(tab[i*2] > tab[i*2+1] || i*2+1 > n){
  50.                                               swap(tab[i],tab[i*2]);
  51.                                               i=i*2;
  52.                                               }
  53.                                   else{
  54.                                        swap(tab[i],tab[i*2+1]);
  55.                                        i=i*2+1;
  56.                                        }}
  57.                            else break;
  58.                                               }
  59.                            }
  60.               void sort(){
  61.                    int pom = n;
  62.                    
  63.                    for(int i=1; i<=n; i++){
  64.                            swap(tab[1],tab[pom]);
  65.                  pom--;
  66.                  int i=1;
  67.                  
  68.                  while(i*2 <= pom){
  69.                            if(tab[i]<tab[i*2] || tab[i] < tab[i*2+1]){
  70.                                   if(tab[i*2] > tab[i*2+1] || i*2+1 > pom){
  71.                                               swap(tab[i],tab[i*2]);
  72.                                               i=i*2;
  73.                                               }
  74.                                   else{
  75.                                        swap(tab[i],tab[i*2+1]);
  76.                                        i=i*2+1;
  77.                                        }}
  78.                            else break;
  79.                                               }
  80.                            }
  81.                  if(tab[1]>tab[2]) swap(tab[1],tab[2]);
  82.                  //   for(int j=1; j<=n; j++){
  83.                          //   cout<<tab[j]<<" ";}
  84.                             }
  85.                  
  86.                     };
  87.        
  88.      
  89.      
  90. template <typename T>
  91. struct Node{
  92.              
  93.       int id;
  94.       T val;
  95.       Node<T> *left;
  96.       Node<T> *right;
  97.       };
  98.      
  99. template <class T>
  100. class TreeBS{
  101.       public:
  102.      
  103.       T *tab;
  104.       int tabsize;
  105.       Node<T> *root;
  106.       int sizebst;
  107.       int iterator;
  108.              
  109.       TreeBS(){
  110.                sizebst=0;
  111.                root=NULL;
  112.                tabsize=10000000;
  113.                tab=new T[tabsize];
  114.                iterator=0;
  115.                }
  116.       ~TreeBS(){
  117.                
  118.                 }
  119.                
  120.       void insert(T el){
  121.          
  122.            Node<T> *node=new Node<T>();
  123.            node->val=el;
  124.            node->id=sizebst;
  125.            sizebst++;
  126.            node->left=NULL;
  127.            node->right=NULL;
  128.            
  129.            
  130.            Node<T> *it=root;
  131.            
  132.            if(it==NULL) root=node;
  133.            else{
  134.                          while(1){
  135.                                   if(it->val>el){
  136.                                                  if(it->left==NULL){
  137.                                                                     it->left=node;
  138.                                                                                   break;
  139.                                                    }
  140.                                                  else{
  141.                                                       it=it->left;
  142.                                                      
  143.                                                       }}
  144.                                                  
  145.                                                  
  146.                                   else{
  147.                                        if(it->right==NULL){
  148.                                                            it->right=node;
  149.                                                                                   break;
  150.                                                                     }
  151.                                                  else{
  152.                                                       it=it->right;
  153.                                                      
  154.                                                       }}}}}
  155.            void inorder(Node<T> *wskaznik){
  156.                
  157.                 if(wskaznik!=NULL){
  158.                              inorder(wskaznik->left);
  159.                              
  160.                              tab[iterator]=wskaznik->val;
  161.                            //  cout<<tab[iterator]<<" ";
  162.                              iterator++;
  163.                              
  164.                              inorder(wskaznik->right);
  165.                              }
  166.              
  167.                 }
  168.                                        };
  169.                                        
  170. int argmin(int *tab, int N){
  171.     int min=0;
  172.     for(int i=1; i<N; i++){
  173.             if(tab[i]<tab[min])
  174.             min=i;
  175.             }
  176.     return min;
  177.             }
  178.  
  179. void los(int *tab, int N){        
  180.      srand(time(NULL));
  181.      for(int i=0; i<N; i++){
  182.              tab[i]=rand()%500;
  183.              }}
  184. void druk(int *tab, int N)        
  185. {
  186.      for(int i=0; i<N; i++){
  187.              cout<<tab[i];
  188.              if (i<N-1){                    
  189.                       cout<<", ";}  
  190.              }}
  191.  
  192. int *tabx;
  193.  
  194. void scal(int *tab, int l, int m, int r)
  195. {
  196.   int i = l, j = m + 1;
  197.  
  198.   for(int i = l;i<=r; i++)
  199.     tabx[i] = tab[i];  
  200.  
  201.   for(int k=l;k<=r;k++)
  202.   if(i<=m)
  203.     if(j <= r)
  204.          if(tabx[j]<tabx[i])
  205.              tab[k] = tabx[j++];
  206.          else
  207.              tab[k] = tabx[i++];
  208.     else
  209.         tab[k] = tabx[i++];
  210.   else
  211.       tab[k] = tabx[j++];
  212. }
  213.  
  214. void sort_scalanie(int *tab,int l, int r)
  215. {
  216.   if(r<=l) return;
  217.  
  218.   int m = (r+l)/2;
  219.  
  220.   sort_scalanie(tab, l, m);
  221.   sort_scalanie(tab, m+1, r);
  222.  
  223.   scal(tab, l, m, r);
  224. }
  225.  
  226.  
  227.  
  228. void sort_wstawianie(int *tab, int N){
  229.      int tmp;
  230.      for(int j=1; j<N;  j++){
  231.              if(tab[j-1]>tab[j]){
  232.                                  tmp=tab[j];
  233.              for (int i=j-1;i>=0;i--){
  234.                  if(tab[i]>tmp){
  235.                  tab[i+1]=tab[i];
  236.                 }
  237.                  else{
  238.                       tab[i+1]=tmp;
  239.  
  240.                       break;}}
  241.                       if(tab[0]>tmp)
  242.                                      tab[0]=tmp;
  243.                                      
  244.                       }}}
  245.              
  246.                  
  247. void sort_babelkowe(int *tab, int N){
  248.      for(int i=0; i<N; i++){                
  249.              for(int j=0; j<N-1-i; j++){    
  250.                      if(tab[j]>tab[j+1]){    
  251.                           int tmp=tab[j];
  252.                           tab[j]=tab[j+1];
  253.                           tab[j+1]=tmp;
  254.                           }      
  255.                      }}}        
  256. void sort_wybor(int *tab, int N){
  257.      int min, tmp;
  258.      for(int i=0; i<N-1; i++){
  259.              min=argmin(tab+i,N-i);
  260.              if(min>0){
  261.              tmp=tab[i];
  262.              tab[i]=tab[min+i];
  263.              tab[min+i]=tmp;
  264.              }
  265.              }}
  266.                
  267. void quicksort(int *tab, int l, int r)
  268. {
  269.   if(r <= l) return;
  270.  
  271.   int i=l-1, j=r+1,
  272.   X = tab[(l+r)/2];
  273.  
  274.   while(1)
  275.   {
  276.     while(X>tab[++i]);
  277.  
  278.     while(X<tab[--j]);
  279.  
  280.     if(i<=j)
  281.       swap(tab[i],tab[j]);
  282.     else
  283.       break;
  284.   }
  285.  
  286.   if(j>l)
  287.   quicksort(tab, l, j);
  288.   if(i<r)
  289.   quicksort(tab, i, r);
  290. }          
  291.                              
  292.              
  293. int main()
  294. {
  295.     TreeBS<int> drzewo[10];
  296.     kopiec<int> heap[10];
  297.     int N;
  298.     ofstream plik;
  299.         plik.open("sortowanianowe.txt");
  300.         //int rozmiar[]={15000,30000,45000,60000,75000,90000,105000,120000,135000,150000};
  301.         int rozmiar2[]={50000,100000,150000,200000,250000,300000,350000,400000,450000,500000};
  302.  
  303.         clock_t start;
  304.         double czas;
  305.     /*    plik<<"Rozmiary tablic [x]: "<<endl<<endl;
  306.         for (int ss=0;ss<10;ss++){
  307.         plik<<rozmiar[ss]<<" ";}
  308.        
  309.         plik<<endl<<endl;
  310.         for (int s=1;s<6;s++){
  311.         switch(s){
  312.                   case 1:
  313.                        plik<<"SORTOWANIE BĄBELKOWE [y1]"<<endl<<endl;
  314.                         for(int i=0;i<10;i++){                  
  315.                                 N=rozmiar[i];
  316.                                 int *tab=new int[N];
  317.                                 los(tab,N);
  318.                
  319.                                 start = clock();
  320.                                 sort_babelkowe(tab,N);
  321.                                 czas=(clock()-start )/(double)CLOCKS_PER_SEC;
  322.                                         cout<<endl<<"Czas: "<<czas;
  323.                                         plik<<czas<<" ";}
  324.                                         cout<<endl;
  325.                                         break;
  326.                                        
  327.                   case 2:
  328.                        plik<<endl<<endl<<"SORTOWANIE PRZEZ WSTAWIANIE [y2]"<<endl<<endl;
  329.                         for(int i=0;i<10;i++){                  
  330.                                 N=rozmiar[i];
  331.                                 int *tab=new int[N];
  332.                                 los(tab,N);
  333.                
  334.                                 start = clock();
  335.                                 sort_wstawianie(tab,N);
  336.                                 czas=(clock()-start )/(double)CLOCKS_PER_SEC;
  337.                                         cout<<endl<<"Czas: "<<czas;
  338.                                         plik<<czas<<" ";}
  339.                                         cout<<endl;
  340.                                         break;
  341.                                        
  342.                        case 3:
  343.                        plik<<endl<<endl<<"SORTOWANIE PRZEZ WYBÓR [y3]"<<endl<<endl;
  344.                         for(int i=0;i<10;i++){                  
  345.                                 N=rozmiar[i];
  346.                                 int *tab=new int[N];
  347.                                 los(tab,N);
  348.                
  349.                                 start = clock();
  350.                                 sort_wybor(tab,N);
  351.                                 czas=(clock()-start )/(double)CLOCKS_PER_SEC;
  352.                                         cout<<endl<<"Czas: "<<czas;
  353.                                         plik<<czas<<" ";}
  354.                                         cout<<endl;
  355.                            break;
  356.                            
  357.                         case 4:
  358.                        plik<<endl<<endl<<"SORTOWANIE PRZEZ SCALANIE [y4]"<<endl<<endl;
  359.                         for(int i=0;i<10;i++){                  
  360.                                 N=rozmiar[i];
  361.                                 int *tab=new int[N];
  362.                                 tabx = new int[N];
  363.                                 los(tab,N);
  364.                
  365.                                 start = clock();
  366.                                 sort_scalanie(tab,0,N-1);
  367.                                 czas=(clock()-start )/(double)CLOCKS_PER_SEC;
  368.                                         cout<<endl<<"Czas: "<<czas;
  369.                                         plik<<czas<<" ";}
  370.                                         cout<<endl;
  371.                              
  372.                                 break;
  373.                                
  374.                         case 5:
  375.                        plik<<endl<<endl<<"QUICK SORT [y5]"<<endl<<endl;
  376.                         for(int i=0;i<10;i++){                  
  377.                                 N=rozmiar[i];
  378.                                 int *tab=new int[N];
  379.                                 los(tab,N);
  380.                
  381.                                 start = clock();
  382.                                 quicksort(tab, 0, N-1);
  383.                                 czas=(clock()-start )/(double)CLOCKS_PER_SEC;
  384.                                         cout<<endl<<"Czas: "<<czas;
  385.                                         plik<<czas<<" ";}
  386.                                         cout<<endl<<endl;
  387.                            break;
  388.                        
  389.                             }
  390.  
  391. } */
  392.     //  cout<<sizeof(int);         
  393.                     plik<<endl<<endl<<"Rozmiary tablic [x2]: "<<endl<<endl;
  394.                     for (int ssss=0;ssss<10;ssss++){
  395.            plik<<rozmiar2[ssss]<<" ";}
  396.                 for(int sss=1; sss<5; sss++){
  397.                     switch(sss){
  398.                        
  399.                         case 1:
  400.                        plik<<endl<<endl<<"SORTOWANIE PRZEZ SCALANIE [y6]"<<endl<<endl;
  401.                         for(int i=0;i<10;i++){                  
  402.                                 N=rozmiar2[i];
  403.                                 int *tab=new int[N];
  404.                                 tabx = new int[N];
  405.                                 start = clock();
  406.                                 los(tab,N);
  407.                
  408.                                 sort_scalanie(tab,0,N-1);
  409.                                 czas=(clock()-start )/(double)CLOCKS_PER_SEC;
  410.                                         cout<<endl<<"Czas: "<<czas;
  411.                                         plik<<czas<<" ";}
  412.                                         cout<<endl;
  413.                              
  414.                                 break;
  415.                                
  416.                         case 2:
  417.                        plik<<endl<<endl<<"QUICK SORT [y7]"<<endl<<endl;
  418.                         for(int i=0;i<10;i++){                  
  419.                                 N=rozmiar2[i];
  420.                                 int *tab=new int[N];
  421.                                
  422.                                 start = clock();
  423.                                 los(tab,N);
  424.                
  425.                                
  426.                                 quicksort(tab, 0, N-1);
  427.                                 czas=(clock()-start )/(double)CLOCKS_PER_SEC;
  428.                                         cout<<endl<<"Czas: "<<czas;
  429.                                         plik<<czas<<" ";}
  430.                                         cout<<endl;
  431.                            break;
  432.                    
  433.                     case 3:
  434.                        plik<<endl<<endl<<"HEAPSORT [y7]"<<endl<<endl;
  435.                         for(int i=0;i<10;i++){                  
  436.                                 N=rozmiar2[i];
  437.                                 start = clock();
  438.                                 for(int licz=0; licz<N; licz++){
  439.                                 heap[i].push(rand()%500);
  440.                                 }
  441.                                
  442.                                
  443.                                 heap[i].sort();
  444.                                 czas=(clock()-start )/(double)CLOCKS_PER_SEC;
  445.                                         cout<<endl<<"Czas: "<<czas;
  446.                                         plik<<czas<<" ";}
  447.                                         cout<<endl;
  448.                            break;
  449.                            
  450.                     case 4:
  451.                        plik<<endl<<endl<<"BST sort [y7]"<<endl<<endl;
  452.                         for(int i=0;i<10;i++){                  
  453.                                 N=rozmiar2[i];
  454.                                
  455.                                 start = clock();
  456.                                 for(int liczn=0; liczn<N; liczn++){
  457.                                 drzewo[i].insert(rand()%5000000);
  458.                                 }
  459.                                
  460.                                
  461.                                 drzewo[i].inorder(drzewo[i].root);
  462.                                 czas=(clock()-start )/(double)CLOCKS_PER_SEC;
  463.                                         cout<<endl<<"Czas: "<<czas;
  464.                                         plik<<czas<<" ";}
  465.                                         cout<<endl;
  466.                            break;
  467.                     }
  468.                 }
  469. plik.close();
  470. cout<<endl;
  471. system("pause");
  472. return (0);
  473. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement