По какой-то причине мне понадобилось некоторое время, чтобы окунуться в это, но есть один бит, о котором я до сих пор не уверен.C++ быстрый запрос сравнения сортировки
В приведенном ниже коде, этот бит:
a.at(first) = a.at(last);
a.at(last) = a.at(++first);
a.at(first) = pivot;
Мой вопрос, когда a.at (++ первая) поменялись местами с a.at (последний), он не сравнивались, имеет Это? a.at (last) ниже, чем точка поворота, поэтому перемещается, но нет способа узнать, является ли a.at (++ first) больше или равно оси pivot, есть ли? Или я чего-то не хватает?
#include <iostream>
#include <vector>
using namespace std;
void quick(vector<int>&);
void quick_helper(vector<int>&, int, int);
void print(vector<int>);
int main(){
vector<int>v(10);
v.at(0) = 8;
v.at(1) = 3;
v.at(2) = 7;
v.at(3) = 2;
v.at(4) = 5;
v.at(5) = 9;
v.at(6) = 1;
v.at(7) = 4;
v.at(8) = 0;
v.at(9) = 6;
cout << "Before sorting:\n";
print(v);
quick (v);
cout << "After sorting:\n";
print(v);
return 0;
}
void print(vector<int> a)
{
for (int i = 0; i < static_cast<int>(a.size()); i++)
cout << a[i] << " ";
cout << "\n";
}
void quick(vector<int>& a){
quick_helper(a, 0, static_cast<int>(a.size() - 1));
}
void quick_helper(vector<int>& a, int l, int r){
int i, first, last, pivot;
if (r>l){
first = l;
last = r;
i = (l+r)/2;
pivot = a.at(i);
a.at(i) = a.at(first);
a.at(first) = pivot;
while (last > first){
if (a.at(last) >= pivot){
last--;
} else {
a.at(first) = a.at(last);
a.at(last) = a.at(++first);
a.at(first) = pivot;
}
}
pivot = first;
quick_helper(a, l, pivot-1);
quick_helper(a, pivot+1, r);
}
return;
}
Возможно, его легче понять, если вы проведете через него небольшой массив (например, 7 элементов) на бумажной подушке. Вы будете удивлены, как это поможет вам понять, как все работает. [См. Здесь для примера] (http://ideone.com/G2hEQ6) традиционного алгоритма быстрой сортировки на месте, как описано в Wiki. Он работает практически так же, как и ваша реализация, но заполняет слева направо, чтобы найти опорный слот, в котором вы заполняете справа налево. Идея, тем не менее, та же. Желаю вам удачи. – WhozCraig