Przeglądałem różne samouczki i artykuły omawiające quicksort i szybkie wybieranie, jednak moje rozumienie ich jest wciąż niepewne.Zrozumienie algorytmu QuickSelect
Biorąc pod uwagę tę strukturę kodu, muszę być w stanie zrozumieć i wyjaśnić, jak działa funkcja szybkiego wyboru.
// return the kth smallest item
int quickSelect(int items[], int first, int last, int k) {
int pivot = partition(items, first, last);
if (k < pivot-first) {
return quickSelect(items, first, pivot, k);
} else if (k > pivot) {
return quickSelect(items, pivot+1, last, k-pivot);
} else {
return items[k];
}
}
Potrzebuję trochę pomocy ze uszkodzi do pseudo-kodu, a ja nie zostały dostarczone z kodem funkcji partycji, chciałbym, aby zrozumieć, co to nie ze względu na funkcję quickselect dostarczone.
Wiem, jak działa quicksort, ale nie po prostu szybko. Podany przeze mnie kod jest przykładem na to, jak sformatować szybki wybór.
EDIT: Skorygowana kod jest
int quickSelect(int items[], int first, int last, int k)
{
int pivot = partition(items, first, last);
if (k < pivot-first+1)
{ //boundary was wrong
return quickSelect(items, first, pivot, k);
}
else if (k > pivot-first+1)
{//boundary was wrong
return quickSelect(items, pivot+1, last, k-pivot);
}
else
{
return items[pivot];//index was wrong
}
}
Courtesty: @Haitao
mogę być zbyt szczegółowe z moich potrzeb - ogólne zrozumienie quickselect co pomogłoby najbardziej kod I, pod warunkiem jest tego przykładem. – Edge
Te informacje z MIT są sortowane, a nie wybierane. O ile widzę. – Edge
Dlaczego potrzebujemy tych: przestawne-pierwsze + 1 i k-przegubowe –