/ / Kod szybkiego algorytmu sortowania - c ++

Kod szybkiego sortowania algorytmów - c ++

Próbuję zaimplementować szybkiego sortowania, który sortuje liczby i słowa na podstawie wartości liczb.Nie mogę dowiedzieć się, jak naprawić poniższy kod do pracy w prawo.

 if (high!=low&& high>low)//compares hashes and finds the number in the middle. swaps hashes and corresponding words
{

long one=hash[low];
long two=hash[high];
long three = hash[high/2];
if((one<=two&&one>=three)||(one<=three&&one>=two))
{
swap(hash[low], hash[high]);
swap(copyOfWords[low], copyOfWords[high]);
}
else if((three<=one&&three>=two)||(three<=two&&three>=one))
{

swap(hash[high/2], hash[high]);
swap(copyOfWords[high/2], copyOfWords[high]);
}
else
{

}
int i=low;
int j=high-1;
while(i!=j&&i<j)
{

while(hash[i]<hash[high]&&i<j)// find higher numbers and lower numbers then the middlle and swaps them
{
i++;
}
while(hash[j]>hash[high]&&i<j)
{
j--;
}
if(i==j||i>j)
{
}
else
{
swap(hash[i],hash[j]);
swap(copyOfWords[i],copyOfWords[j]);
i++;
j--;
}
}
swap(hash[i],hash[high]);
swap(copyOfWords[i], copyOfWords[high]);



quickSort(low, j-1);//recursive
quickSort(j+1, high);

}

}

Wiem, że wartości w hash i copyOfWords sąpoprawne, ponieważ kiedy używam sortowania powłoki, sortuje je we właściwy sposób. na przykład, jeśli istnieją dwa słowa, copyOfWOrds [0] = "1994" i copyOfWords [1] = "a" to hash [0] = 549456039 i hash [1] = 197000000, ale sortuje je jako 1994, zamiast 1994. Powoduje więcej problemów z większą ilością elementów. Każda pomoc będzie doceniona. Dzięki

Odpowiedzi:

1 dla odpowiedzi № 1

Dlaczego nie chodzisz strona wiki szybkiego sortowania i zobacz, jak to się stało?

Twój kod próbuje zrobić niepotrzebne rzeczy i ostatecznie potyka się o własne stopy. Niech to będzie proste i będzie działać.

A Btw Quicksort działa bardzo dobrze na tablicach, więc wstydem jest stworzyć jedną wersję, w której tablica jest zakodowana.