Проблема с std :: partition для разделения элементов меньше чем pivot - PullRequest
1 голос
/ 10 октября 2019

Итак, я реализовал быструю сортировку, где я использовал std :: partition для получения индекса раздела, но он не работает должным образом. Вот код

int l=10;
srand(time(NULL));
vector<int> arr(l,int());
generate(arr.begin(),arr.end(),[](){return rand()%100;});
int p=arr.back();
copy(arr.begin(),arr.end(),ostream_iterator<int>(cout," "));
cout<<"Index:"<< distance( begin( arr ), partition(begin(arr), end(arr), [&p](int m){ return m<p;}) );
copy(arr.begin(),arr.end(),ostream_iterator<int>(cout," "));

Вот снимок экрана вывода SR

1 Ответ

0 голосов
/ 10 октября 2019

Я думаю, что вместо

cout<<"Index:"<<*partition(begin(arr), end(arr), [&p](int m){ return m<p;});

вы имеете в виду

cout<<"Index:"<< std::distance( std::begin( arr ), partition(begin(arr), end(arr), [&p](int m){ return m<p;}) );

То есть вам нужно вычислить расстояние между указателем на первый элемент массива и указателем наэлемент, где заканчивается разделение.

...