/ Kód rýchleho triedenia algoritmu - c ++

Kód algoritmu rýchleho triedenia - c ++

Snažím sa implementovať rýchle triedenie, ktoré zoraďuje čísla a slová na základe číselnej hodnoty. Nemôžem zistiť, ako opraviť nasledujúci kód, aby fungoval správne.

 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);

}

}

Viem hodnoty v hash a copyOfWordssprávne, pretože keď používam shell triedu, zoraďuje ich správnym smerom. napríklad ak existujú dve slová, copyOfWOrds [0] = "1994" a copyOfWords [1] = "a" potom hash [0] = 549456039 a hash [1] = 197000000. namiesto roku 1994. Spôsobuje viac problémov s viacerými prvkami. Akákoľvek pomoc by bola ocenená. Vďaka

odpovede:

1 pre odpoveď č. 1

Prečo nejdeš rýchle zoraďovanie wiki stránky a uvidíte, ako sa to robí?

Váš kód sa pokúša robiť zbytočné suroviny a nakoniec prechádza cez vlastné nohy. Udržujte to jednoduché a bude to fungovať.

A Btw Quicksort pracuje veľmi dobre na poli, takže je škoda robiť jednu verziu, kde je pole hard-kódované.