Witam. Piszę własnie Quick sorta, przy zastosowaniu algorytmu Horea do wyznaczenia pivota. Niestety program po uruchomieniu zostaje przerwany, z niewiadomego mi powodu. Bardzo proszę Was o pomoc. Sam nie potrafię już znaleźć błędu.
#include <iostream> #include <algorithm> #include <vector> void Quicksort(std::vector<int> & iTabWithDatas, int iFirst, int iLast); int PartitionHorae(std::vector<int> & iTabWithDatas, int iFirst, int iLast); int main() { std::vector<int>ae{ 5,3,2,6,7,13,7,4}; Quicksort(ae, 0, ae.size()-1 ); for (int i = 0; i < ae.size() ; ++i) { std::cout << ae[i] << "," ; } return 0; } int PartitionHorae(std::vector<int> & iTabWithDatas, int iFirst, int iLast) { int i = iFirst; int iPivot = iTabWithDatas[iFirst]; int j = iLast; while (i <= j) { while (iTabWithDatas[j] < iPivot) { --j; } while (iTabWithDatas[i] > iPivot) { ++i; } if (i <= j) { std::swap(iTabWithDatas[i], iTabWithDatas[j]); ++i; --j; } } return j; } void Quicksort(std::vector<int> & iTabWithDatas, int iFirst, int iLast) { if (iFirst < iLast) { int q = PartitionHorae(iTabWithDatas, iFirst, iLast); Quicksort(iTabWithDatas, iFirst, q); Quicksort(iTabWithDatas, q + 1, iLast); } }
Z góry dziekuje za pomoc.
Pozdrawiam