fork download
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. void sort(int *array, int size)
  5. {
  6. int *l_array;
  7. int l_size = 0;
  8.  
  9. int *r_array;
  10. int r_size = 0;
  11.  
  12. // jednoelementowa tablica jest posortowana więc nie ma potrzeby niczego z nią robić
  13. if(size > 1)
  14. {
  15. l_size = size / 2;
  16. r_size = size - size / 2;
  17.  
  18. l_array = new int[l_size];
  19. r_array = new int[r_size];
  20.  
  21. // utworzylimy nowe tablice lewą i prawą które będą reukrencyjnie sortowane
  22. // posortowane tablice będą zwrócone przez referencję
  23. // nowym tablicą musimy przypisać wartosci (jesczze nie posrotwane)
  24. for(int i = 0, li = 0, ri = 0; i < size; i++)
  25. if(i < l_size)
  26. l_array[li++] = array[i];
  27. else
  28. r_array[ri++] = array[i];
  29.  
  30. //teraz sortujemy nasze małe tablice
  31. sort(l_array, l_size);
  32. sort(r_array, r_size);
  33.  
  34. //teraz w l_array oraz r_array mamy posortowane liczby
  35. //wiec laczymy te dwe tablice i zapisujemy do sortowanej tablicy
  36.  
  37. //liczniki indeksow laczonych tablic zapisujemy globalnie
  38. //po to by wiedziec potem ktora liste ewentualnie trzeba przepisac do konca
  39. //tak samo licznik sortowanej tablicy po to by wiedziec od ktorego elementu
  40. //zaczac zapisywanie
  41. //nawenictwo takie samo jak wyzej (L)eft(i), czyli zmeinna i dla lewej tabicly
  42. //to samo tyczy sie prawej
  43. int i = 0;
  44. int li =0, ri = 0;
  45.  
  46. for(; i < size && li < l_size && ri < r_size; i++)
  47. if(l_array[li] < r_array[ri])
  48. array[i] = l_array[li++]; //zwiekszamy li bo zapisalismy ta liczbe
  49. else
  50. array[i] = r_array[ri++];
  51.  
  52. //teraz przepisujemy pozostala czesc ktorejs listy
  53. //nejpierw lewa, o ile jest taka potrzeba
  54. for(;i < size && li < l_size; i++)
  55. array[i] = l_array[li++];
  56.  
  57. //teraz prawa tablica
  58. for(;i < size && ri < r_size; i++)
  59. array[i] = r_array[ri++];
  60.  
  61. //czyscimy pamiec
  62. delete[] l_array;
  63. delete[] r_array;
  64. }
  65.  
  66. //zwracamy przez referencje
  67. }
  68.  
  69. int main() {
  70. int to_sort[] = {1, 0, -4, 5, 7, 6, 3};
  71.  
  72. sort(to_sort, 7);
  73.  
  74. for(int i = 0; i < 7; i++)
  75. cout << to_sort[i] << ", ";
  76.  
  77. return 0;
  78. }
Success #stdin #stdout 0s 3468KB
stdin
Standard input is empty
stdout
-4, 0, 1, 3, 5, 6, 7,