C#使用重复出现的值对数组进行快速排序

C#使用重复出现的值对数组进行快速排序,c#,quicksort,C#,Quicksort,在得到一个或多个重复出现的值之前,快速排序工作正常 这个问题似乎已经被人们知道了很长一段时间,我在论坛上找到了一些“解决方案”和讨论。最接近实际解决方案的是: 问题是我不能评论这个答案,否则我会的 但是回到我的问题上来。如何使此代码与重复出现的值一起工作。(是的,我知道创建交换方法和分区方法可能看起来更好,但这与问题无关) public void快速排序(int[]A,int-lo,int-hi) { 如果(低

在得到一个或多个重复出现的值之前,快速排序工作正常

这个问题似乎已经被人们知道了很长一段时间,我在论坛上找到了一些“解决方案”和讨论。最接近实际解决方案的是: 问题是我不能评论这个答案,否则我会的

但是回到我的问题上来。如何使此代码与重复出现的值一起工作。(是的,我知道创建交换方法和分区方法可能看起来更好,但这与问题无关)

public void快速排序(int[]A,int-lo,int-hi)
{
如果(低<高)
{
INTINVOT = a[(Hi-Lo)/2 +Lo];//i可以创建一个随机支点,但它具有与将枢轴放在中间的相同效果。排序算法不知道值。
int左=0;
int right=hi;
while(左枢轴)
对--;

如果(左似乎你的方法不是从好的索引开始的。从
lo
开始,而不是
0
会更好

public void QuickSort(int[] A, int lo, int hi)
{
    if (lo < hi)
    {
        int pivot = A[(hi-lo)/2+lo]; // I can create a random pivot, but that has the same effect as putting the pivot in the middle. The sorting algorithm doesn't know the values.
        int left = lo;
        int right = hi;
...
    }
}
public void快速排序(int[]A,int-lo,int-hi)
{
如果(低<高)
{
INTINVOT = a[(Hi-Lo)/2 +Lo];//i可以创建一个随机支点,但它具有与将枢轴放在中间的相同效果。排序算法不知道值。
int左=低;
int right=hi;
...
}
}

除非你这样做是为了学习排序算法,否则你应该使用内置的
Sort
或LINQ来对数据进行排序和排序。好吧,我正在尝试刷新一下我对这方面的记忆。
int left=0;
是错误的-它应该是
int left=lo;
。否则,我看不到任何立即的问题。你是正确的这也解决了我的问题…:/
public void QuickSort(int[] A, int lo, int hi)
{
    if (lo < hi)
    {
        int pivot = A[(hi-lo)/2+lo]; // I can create a random pivot, but that has the same effect as putting the pivot in the middle. The sorting algorithm doesn't know the values.
        int left = lo;
        int right = hi;
...
    }
}