Advertisement
Guest User

Untitled

a guest
May 19th, 2019
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.79 KB | None | 0 0
  1. //Implementacja sortowanie szybkie(quicksort)
  2. //na podstawie wykladu dr M. Slusarka
  3. //AT
  4. //rozwiazanie czesciowe
  5.  
  6. #include <iostream>
  7. #include <iomanip> //potrzebne dla setw()
  8. using namespace std;
  9.  
  10. const int N = 20; //rozmiar tablicy
  11. typedef int Item;
  12.  
  13. //------------------------------------------------------------
  14. //---Generowanie elementow tablicy A[L..R] liczbami losowymi
  15. //---od najmnieszy do najwiekszy
  16. //------------------------------------------------------------
  17. void generuj_tablice(int A[], int L, int R, int najmniejszy, int najwiekszy)
  18. {
  19. srand(time(0));
  20. for (int i = L; i <= R; i++)
  21. A[i] = rand() % (najwiekszy - najmniejszy + 1) + najmniejszy;
  22. }
  23. //---koniec generuj_tablice----
  24.  
  25. //---------------------------------------------------
  26. //-----wypisywanie fragmentu tablicy od A[L] do A[R]
  27. //---------------------------------------------------
  28. void wypisz_tablice(int A[], int L, int R)
  29. {
  30. for (int i = L; i <= R; i++)
  31. cout << setw(3) << A[i]; //setw wymaga <iomanip>
  32. cout << endl;
  33. }
  34. //------------koniec wypisz_tablice-----------
  35.  
  36. //----------------------------------
  37. //zamiana dwoch elementów wartosciami
  38. //-----------------------------------
  39. void exch(Item &A, Item &B)
  40. {
  41. Item tmp = A;
  42. A = B;
  43. B = tmp;
  44. }
  45. //--koniec exch---------
  46.  
  47. //-----------------------------------------------------
  48. //podział tablicy na dwie częœci
  49. //na elementy mniejsze z lewej strony
  50. //i elementy wieksze z prawej strony wybranego elementu
  51. //-----------------------------------------------------
  52. int partition(Item a[], int L, int R)
  53. { // założenie: wartownik a[R+1] >= a[i], i=L,L+1,...,R
  54. int i = L;
  55. int j = R + 1;
  56. Item v = a[L];
  57. while (1)
  58. {
  59. while (a[++i] < v)
  60. ;
  61. while (a[--j] > v)
  62. ;
  63. if (i >= j)
  64. break;
  65. exch(a[i], a[j]);
  66. }
  67. exch(a[L], a[j]);
  68. return j;
  69. }
  70.  
  71. //---koniec partition---------------------
  72.  
  73. //----------------------------------------
  74. //Quicksort
  75. //Sortuje fragment tablicy od a[L] do r[R]
  76. //----------------------------------------
  77. void quicksort(Item a[], int L, int R)
  78. {
  79. if (L >= R)
  80. return;
  81. int p = partition(a, L, R);
  82. quicksort(a, L, p - 1);
  83. quicksort(a, p + 1, R);
  84. }
  85. //--------koniec quicksort
  86.  
  87. //-----------------
  88. //Wyszukuje największy element fragmentu tablicy od A[L] do AR]
  89. //
  90. Item max(Item A[], int L, int R)
  91. {
  92. Item max = A[L];
  93.  
  94. for (int i = L; i <= R; i++)
  95. {
  96. if (A[i] > max)
  97. {
  98. max = A[i];
  99. }
  100. }
  101. return max;
  102. }
  103.  
  104. int main()
  105. {
  106. Item a[N + 1];
  107. generuj_tablice(a, 0, N - 1, 0, 99);
  108. cout << "Tablica do posortowana: \n";
  109. wypisz_tablice(a, 0, N - 1);
  110. a[N] = max(a, 0, N - 1); // wartownik
  111. quicksort(a, 0, N - 1);
  112.  
  113. cout << "\nPosortowana tablica :\n";
  114. wypisz_tablice(a, 0, N - 1);
  115. system("PAUSE");
  116. return 0;
  117. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement