gpt4 book ai didi

c++ - 快速排序算法代码

转载 作者:行者123 更新时间:2023-11-28 06:24:38 25 4
gpt4 key购买 nike

我正在尝试实现一种基于数字值对数字和单词进行排序的快速排序。我似乎无法弄清楚如何修复以下代码以使其正常工作。

 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]="1994,"和 copyOfWords[1]="a"那么 hash[0]=549456039 和 hash[1]=197000000,但是排序将它们放入 1994,a而不是 1994,。它会导致更多元素出现更多问题。任何帮助,将不胜感激。谢谢

最佳答案

你为什么不去 the quick sort wiki page看看它是如何完成的?

您的代码试图做一些不必要的事情并最终绊倒自己。保持简单,它会起作用。

顺便说一句,Quicksort 在数组上工作得很好,所以制作一个数组是硬编码的版本是一种耻辱。

关于c++ - 快速排序算法代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28731790/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com