快速排序算法代码

时间:2015-02-25 23:32:36

标签: 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] =&#34; 1994,&#34;和copyOfWords [1] =&#34; a&#34;然后hash [0] = 549456039和hash [1] = 197000000,但排序使它们成为1994年,而不是1994年。它会导致更多元素的问题。任何帮助,将不胜感激。感谢

1 个答案:

答案 0 :(得分:1)

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

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

Btw Quicksort在数组上工作得非常好,所以制作一个硬编码阵列的版本真是太遗憾了。