我试图实施快速排序,根据数值对数字和单词进行排序。我似乎无法弄清楚如何修复以下代码才能正常工作。
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);
}
}
我知道hash和copyOfWords中的值是正确的,因为当我使用shell排序时,它会以正确的方式对它们进行排序。例如,如果有两个单词,copyOfWOrds [0] =&#34; 1994,&#34;和copyOfWords [1] =&#34; a&#34;然后hash [0] = 549456039和hash [1] = 197000000,但排序使它们成为1994年,而不是1994年。它会导致更多元素的问题。任何帮助,将不胜感激。感谢
答案 0 :(得分:1)
为什么不去the quick sort wiki page看看它是如何完成的?
你的代码试图做不必要的事情并最终自己绊倒。保持简单,它将起作用。
Btw Quicksort在数组上工作得非常好,所以制作一个硬编码阵列的版本真是太遗憾了。