Advertisement
Guest User

Untitled

a guest
Nov 21st, 2019
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 5.46 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4.  
  5.  
  6. void kopiuj_tablice(int tab[], int tab2[], int rozmiar){
  7.  
  8.     for (int i=0; i < rozmiar; i++)
  9.     {
  10.         tab2[i]=tab[i];
  11.     }
  12.  
  13. }
  14.  
  15.  
  16. void zmiana(int tab[], int lewy, int prawy)
  17. {
  18.  
  19.     int chwilowy = tab[lewy];
  20.     tab[lewy] = tab[prawy];
  21.     tab[prawy] = chwilowy;
  22.  
  23. }
  24.  
  25. void drukujTablice(int tab[], int dlug)
  26. {
  27.  
  28.     for (int i=0; i<dlug; i++)
  29.     {
  30.         printf("%d ", tab[i]);
  31.     }
  32.  
  33.  
  34. }
  35.  
  36.  
  37. int partition(int tab[], int lewy, int prawy)
  38. {
  39.  
  40.     int chwilowo = 0;
  41.     int x = tab[prawy];
  42.     int i = lewy - 1;
  43.     for (int j=lewy; j<=prawy; j++)
  44.     {
  45.         if(tab[j] <= x)
  46.         {
  47.             i++;
  48.             chwilowo = tab[i];
  49.             tab[i] = tab[j];
  50.             tab[j] = chwilowo;
  51.         }
  52.  
  53.     }
  54.    
  55.     if(i<prawy){ return i;}
  56.     else { return i-1; }
  57.  
  58. }
  59.  
  60.  
  61. void quicksort(int tab[], int lewy, int prawy){
  62.  
  63.     if (lewy < prawy)
  64.     {
  65.        
  66.         int part = partition(tab,lewy,prawy);
  67.         quicksort(tab, lewy, part - 1);
  68.         quicksort(tab, part + 1 ,prawy);
  69.  
  70.     }  
  71.  
  72.  
  73. }
  74.  
  75. /*
  76. void wstawianie_sort(int tab[], int rozmiar)
  77. {
  78.  
  79.     //printf("dzialam insert\n");
  80.     int element_sprawdzany;
  81.     int indeks_elementu_po_lewej;
  82.     for (int i = 1; i < rozmiar; i++)
  83.     {
  84.  
  85.         element_sprawdzany = tab[i];
  86.         indeks_elementu_po_lewej = i-1;
  87.        
  88.        
  89.         while ( indeks_elementu_po_lewej >= 0 && tab[indeks_elementu_po_lewej] > element_sprawdzany )
  90.         {
  91.             printf("dzialam insert srodek\n");
  92.             tab[indeks_elementu_po_lewej+1] = tab[indeks_elementu_po_lewej];
  93.             indeks_elementu_po_lewej = indeks_elementu_po_lewej - 1;
  94.  
  95.         }
  96.  
  97.         tab[indeks_elementu_po_lewej + 1] = element_sprawdzany;
  98.  
  99.  
  100.     }
  101.  
  102. }*/
  103.  
  104. void wstawianie_sort(int tab[], int rozmiar){
  105.  
  106.     int i,klucz,j;
  107.     for(i=1; i < rozmiar; i++){
  108.  
  109.         klucz = tab[i];
  110.         j = i - 1;
  111.         //printf("dzialam");
  112.  
  113.         while (j >= 0 && tab[j] > klucz){
  114.             tab[j+1] = tab[j];
  115.             j = j - 1;
  116.             //printf("dzialam wewnatrz");
  117.  
  118.         }
  119.     tab[j + 1] = klucz;
  120.  
  121.     }
  122.  
  123.  
  124. }
  125.  
  126.  
  127.  
  128.  
  129.  
  130.  
  131.  
  132.  
  133. void quicksort_zepsuty(int tab[], int lewy, int prawy, int rozmiar, int c){
  134.  
  135.     if (lewy < prawy)
  136.     {
  137.  
  138.         //printf("dzialam srodek\n");
  139.         if ( (prawy - lewy + 1) > c )
  140.         {
  141.  
  142.             //printf("działam wnatrz\n");
  143.            
  144.         int part = partition(tab,lewy,prawy);
  145.         quicksort(tab, lewy, part);
  146.         quicksort(tab, part + 1 ,prawy);
  147.  
  148.         }
  149.      
  150.  
  151.     }
  152.  
  153.  }  
  154.  
  155.  
  156.  
  157.  
  158.  
  159.  
  160.  
  161. int main(){
  162.  
  163.     srand(time(NULL));
  164.  
  165.     int dlugosc = 10000;
  166.  
  167.     int tablica[dlugosc]; // <--- Losowe
  168.     int tablica2[dlugosc];
  169.     int tablica3[dlugosc]; // <--- losowe
  170.     int tablica4[dlugosc];
  171.  
  172.     int limit = 500;
  173.  
  174.    // int dlugosc = sizeof(tablica)/sizeof(tablica[0]);
  175.  
  176.     for(int i=0; i> dlugosc; i++)
  177.     {
  178.  
  179.         tablica[i] = rand() % 101;
  180.         tablica2[i] = dlugosc - i;
  181.  
  182.     }
  183.  
  184.  
  185.     for(int i=0; i>dlugosc; i++){
  186.  
  187.         tablica3[i]=tablica[i];
  188.         tablica4[i] = dlugosc - 1;
  189.  
  190.  
  191.     }
  192.  
  193.  
  194.     // SPRAWDZAMY DLA NORMALNEGO QUICKSORTA LOSOWE DANE
  195.    
  196.     clock_t poczatek = clock();
  197.     quicksort(tablica,0,dlugosc-1);
  198.     clock_t koniec = clock();
  199.     printf("Czas dla quicksorta zywklego z danymi losowymi = %lfs\n", (koniec - poczatek) / 1000000.0);
  200.  
  201.  
  202.     // SPRAWDZAMY DLA ZEPSUTEGO QUICKSORTA LOSOWE DANE
  203.  
  204.     poczatek = clock();
  205.     quicksort_zepsuty(tablica3,0,dlugosc-1,dlugosc,limit);
  206.     wstawianie_sort(tablica3,dlugosc);
  207.     koniec = clock();
  208.     printf("Czas dla zepsutego quicksorta z danymi losowymi = %lfs\n", (koniec - poczatek) / 1000000.0);
  209.  
  210.  
  211.     // SPRAWDZAMY DLA NORMALNEGO QUICKSORTA NIEKORZYSTNE DANE
  212.  
  213.     poczatek = clock();
  214.     quicksort(tablica2,0,dlugosc-1);
  215.     koniec = clock();
  216.     printf("Czas dla quicksorta zywklego z niekorzystnymi danymi = %lfs\n", (koniec - poczatek) / 1000000.0);
  217.  
  218.     // SPRAWDZAMY DLA ZEPSUTEGO QUICKSORTA NIEKORZYSTNE DANE
  219.  
  220.     poczatek = clock();
  221.     quicksort_zepsuty(tablica4,0,dlugosc-1,dlugosc,limit);
  222.     wstawianie_sort(tablica4,dlugosc);
  223.     koniec = clock();
  224.     printf("Czas dla zepsutego quicksorta z niekorzystnymi danymi = %lfs\n", (koniec - poczatek) / 1000000.0);
  225.  
  226.    
  227.  
  228.     //int tablica[] = {19,28,37,46,56,412,1,6,9,11};
  229.    
  230.     //int piwot = tablica[rand()%dlugosc];
  231.  
  232.     //printf("Nasza tablica \t\t: ");
  233.  
  234.     //drukujTablice(tablica,dlugosc);
  235.  
  236.  
  237.     //printf("\nNasz startowy pivot \t: %d\n", piwot);
  238.  
  239.     /*
  240.     quicksort(tablica,0,dlugosc-1);
  241.  
  242.     printf("\nTablica posortowana\t: ");
  243.  
  244.     drukujTablice(tablica,dlugosc);
  245.  
  246.     printf("\n");
  247.     */
  248.  
  249.  
  250.    
  251.     printf("============================================================\n");
  252.  
  253.  
  254.     int tab5[dlugosc];
  255.  
  256.     for (int i=0; i < dlugosc; i++){
  257.  
  258.         tab5[i] = rand() % 101;
  259.  
  260.     }
  261.     poczatek = clock();
  262.     quicksort_zepsuty(tab5,0,dlugosc-1,dlugosc,limit);
  263.     wstawianie_sort(tab5,dlugosc);
  264.     //quicksort_zepsuty(tablica_kopia,0,dlugosc-1,dlugosc,limit);
  265.     //wstawianie_sort(tablica_kopia,dlugosc);
  266.     koniec = clock();
  267.     printf("Czas dla zepsutego quicksorta z niekorzystnymi danymi = %lfs\n", (koniec - poczatek) / 1000000.0);
  268.  
  269.  
  270.     /*
  271.     quicksort_zepsuty(tablica,0,dlugosc-1,dlugosc,5);
  272.    
  273.     printf("\nTablica posortowana\t: ");
  274.  
  275.     drukujTablice(tablica,dlugosc);
  276.  
  277.     printf("\n");
  278.     */
  279.  
  280.  
  281.     return 0;
  282.  
  283. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement