Advertisement
Guest User

Untitled

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