Advertisement
jedrzejd

Sortowanie Przez Scalanie (Merge Sort)

Nov 22nd, 2017
127
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.39 KB | None | 0 0
  1. //
  2. //  main.cpp
  3. //  Sortowanie Przez Scalanie (Merge Sort)
  4. //
  5. //  Created by andy on 22.11.2017.
  6. //  Copyright © 2017 andy. All rights reserved.
  7. //
  8.  
  9. #include <cstdio>
  10. const int wielkosc_tablicy=100;
  11. int tablica[wielkosc_tablicy+5],n;
  12. int L[wielkosc_tablicy],P[wielkosc_tablicy]; // tablice pomocnicze przy scalaniu
  13. int INF=1e9;
  14. void Merge(int lewy,int srodek,int prawy){     //Scalanie tablicy
  15.     int dl1=srodek-lewy+1;
  16.     int dl2=prawy-srodek;
  17.     for(int i=1;i<=dl1;i++)
  18.         L[i]=tablica[lewy+i-1];    //przepisywanie do 2 tablic pomocniczych
  19.     for(int i=1;i<=dl2;i++)
  20.         P[i]=tablica[i+srodek];
  21.     L[dl1+1]=INF;// straznicy miasta
  22.     P[dl2+1]=INF;
  23.     int i=1,j=1;
  24.     for(int poczatek=lewy;poczatek<=prawy;poczatek++){ // scalanie 2 tablic w jedno
  25.         if(L[i]<=P[j]){
  26.             tablica[poczatek]=L[i];
  27.             i++;
  28.         }
  29.         else {
  30.             tablica[poczatek]=P[j];
  31.             j++;
  32.         }
  33.     }
  34. }
  35. void Merge_Sort(int lewy,int prawy){
  36.     if(lewy<prawy){
  37.         int srodek=(lewy+prawy)/2;
  38.         Merge_Sort(lewy,srodek);             // dzielenie na tablicy na pol
  39.         Merge_Sort(srodek+1,prawy);
  40.         Merge(lewy,srodek,prawy);
  41.     }
  42. }
  43. int main(){
  44.     scanf("%d",&n);
  45.     for(int i=1;i<=n;i++)
  46.         scanf("%d",&tablica[i]);
  47.     Merge_Sort(1,n);
  48.     for(int i=1;i<=n;i++)
  49.         printf("%d ",tablica[i]);
  50.     return 0;
  51. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement