Advertisement
Guest User

Untitled

a guest
Apr 8th, 2020
139
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.32 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4.  
  5.  
  6. void scal (string *array, int poczatek, int srodek, int koniec) {
  7.     string* new_array = (string*)calloc(koniec-poczatek, sizeof(*array));
  8.     int i = poczatek;
  9.     int j = srodek+1;
  10.     int k = 0;
  11.    
  12.     while (i <= srodek && j <= koniec) {
  13.         if (array[j].size() < array[i].size()) {
  14.             new_array[k] = array[j];
  15.             j++;
  16.         } else if (array[j].size() == array[i].size()) {
  17.             for(int a=0; a<array[j].size(); a++) {
  18.                 if (array[j][a] > array[i][a]) {
  19.                     new_array[k] = array[i];
  20.                     i++;
  21.                     break;
  22.                 } else if (array[j][a] < array[i][a]) {
  23.                     new_array[k] = array[j];
  24.                     j++;
  25.                     break;
  26.                 } else if (a == array[j].size()-1) {
  27.                     new_array[k] = array[j];
  28.                     j++;
  29.                     break;
  30.                 }
  31.             }
  32.         } else {
  33.             new_array[k] = array[i];
  34.             i++;
  35.         }
  36.         k++;
  37.     }
  38.    
  39.     if (i <= srodek) {
  40.         while (i <= srodek) {
  41.             new_array[k] = array[i];
  42.             i++;
  43.             k++;
  44.         }
  45.     } else {
  46.         while (j <= koniec) {
  47.             new_array[k] = array[j];
  48.             j++;
  49.             k++;
  50.         }
  51.     }
  52.     for (i = 0; i <= koniec-poczatek; i++) {
  53.         array[poczatek+i] = new_array[i];
  54.     }
  55.     free(new_array);
  56. }
  57.  
  58. void sortuj (string *array, int poczatek, int koniec) {
  59.     if (poczatek == koniec) {
  60.         return;
  61.     } else {
  62.         int srodek = (poczatek + koniec) / 2;
  63.         sortuj(array, poczatek, srodek);
  64.         sortuj(array, srodek+1, koniec);
  65.         scal(array, poczatek, srodek, koniec);
  66.     }
  67. }
  68.  
  69. int main() {
  70.     int N;
  71.     printf("Wpisz ile liczb chcesz posortowac (N): ");
  72.     scanf("%d", &N);
  73.    
  74.     //tworzenie tablicy
  75.     string* array = (string*)calloc(N, sizeof(*array));
  76.    
  77.     //wczytywanie tablicy
  78.     for(int i=0; i<N; i++) {
  79.         cin >> array[i];
  80.     }
  81.    
  82.     // sortowanie przez scalanie
  83.     sortuj(array, 0, N-1);
  84.    
  85.     //wypisywanie tablicy
  86.     for(int i=0; i<N; i++) {
  87.         cout << array[i] << endl;
  88.     }
  89.    
  90.     //zwolnienie tablicy
  91.     free(array);
  92.     return 0;
  93. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement