Advertisement
GoralWMoro

MergeSort

May 14th, 2019
602
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.37 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. void Sort(int tablica[],int pierwszy,int srodek, int ostatni){
  4.  
  5.     int lewa = pierwszy; // poczatek pierwszej podtablicy //pomocnicz
  6.     int prawa = srodek+1; // poczatek drugiej podtablicy // pomocnicza
  7.     int k = pierwszy; // wskaznik indexu tablicy głównej// pomocnicza
  8.     int pomocnicza[ostatni]; // ustalamy rozmiar pomocniczej tablicy
  9.  
  10.     for(int i = pierwszy; i <= ostatni; i++) {
  11.         pomocnicza[i] = tablica[i]; // przepisujemy nasze dane do tablicy pomocniczej
  12.     }
  13.  
  14.     // pętla porównująca elementy i sortowanie
  15.     while(lewa <= srodek && prawa <= ostatni){ // dopóki mamy elementy w naszej tablicy, pętla będzie się wykonywać
  16.         if(pomocnicza[lewa] <= pomocnicza[prawa]){ // porównujemy ze są dwa elementy, jedna z lewej tablicy i jeden z drugiej
  17.             tablica[k] = pomocnicza[lewa]; // jesli lewy jest mniejszy to przepisujemy go w miejsce "k"
  18.             lewa++; // przechodzimy do nastpenego elementu z lewej tablicy
  19.         }else
  20.         {
  21.             tablica[k] = pomocnicza[prawa]; //  jesli prawy jest mniejszy to przepisujemy go w miejsce "k"
  22.             prawa++; // przechodzimy do nastpenego elementu z prawej tablicy
  23.         }
  24.         k++; // przechodzimy do nastepenego indeksu naszej talbicy
  25.     }
  26.     // gdy nie sprawdzono wszystkich elementów lewej podtablicy
  27.     while(lewa <= srodek){ // petla działa aż wyczerpiemy wszystkie elementy z lewej tablicy
  28.         tablica[k] = pomocnicza[lewa]; // przypisujemy elementy do naszej tablicy
  29.         lewa++; // przechodzimy do nastepenego elementu
  30.         k++; // przechodzimy do nastepenego indeksu naszej talbicy
  31.     }
  32. }
  33.  
  34. void Merge(int tablica[],int pierwszy,int ostatni){
  35.     int srodkowy = (pierwszy+ostatni) / 2; // wyliczamy środek naszej tablicy
  36.     if(pierwszy < ostatni){ // dopóki lewa strona naszej tablicy, bedzie mniejsza od prawej, dzielimy tablice rekurencyjnie
  37.         Merge(tablica,pierwszy, srodkowy);
  38.         Merge(tablica,srodkowy+1, ostatni);
  39.     }
  40.     Sort(tablica,pierwszy, srodkowy, ostatni); // tutaj nastepuje scalanie naszej tablicy, zgodnie z algorytmem
  41. }
  42.  
  43.  
  44. int main() {
  45.     int tablica[7] = {1,8,2,58,2,98,56};
  46.     Merge(tablica,0,6); // wywołanie funkcji sortowania
  47.  
  48.     for(int i = 0; i < 7; i++) {
  49.         printf("%d ", tablica[i]); // wyświetlenie posortowanej tablicy
  50.     }
  51.     return 0;
  52. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement