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

标签 c++

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

 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/

相关文章:

c++ - 如何正确升级您的 OpenMP 版本?

c++ - 有没有办法将一 block 分配的内存标记为只读?

c++ - khtml 库教程/指南?

c++ - 有没有更优雅的方法来实现 C++ 游戏的 "cheat code"实现?

get 语句时 C++ 崩溃?

c++ - 如何正确设计一个从结构中获取不同字段的仿函数

c++ - 这些是将 printf 的输出设置为字符串的方法吗?

python - gnuradio `ImportError undefined symbol`

c++ - 我如何排序不是数组的元素,而是它的索引?

c# - 研究课题 list