为什么这个QuickSort分区方法错了?

时间:2015-10-23 22:44:26

标签: java sorting quicksort

我有一个quickSort分区方法。 但我不明白为什么这是错误的

方法在这里:

string[] split = Regex.Split(text, "</ss>");

            text = "";

            foreach (string s in split)
            {
                Regex regex = new Regex(@"(?<=\btype="")[^""]*");
                string smily = regex.Match(s).Value;

                string result = Regex.Replace(s, @"<(.|\n)*?>", string.Empty);
                writer.WriteEncodedText(result);

                if (smily != string.Empty)
                {
                    writer.AddAttribute(HtmlTextWriterAttribute.Src, "./Emoticons/" + smily + ".png");
                    writer.RenderBeginTag(HtmlTextWriterTag.Img);
                }
            }

这是使用递归调用它的方式:

private static <E extends Comparable<E>> int partition(E[] list, int first, int last) {
    int pivotIndex = (first + last) / 2;
    E pivot = list[pivotIndex]; // Choose the first element as the pivot
    swap(list, last, pivotIndex);
    pivotIndex = last;
    last--;
    do {
        // Search forward from left
        while (first < last && list[first].compareTo(pivot) <= 0)
            first++;
        // Search backward from right
        while (first <= last && list[last].compareTo(pivot) > 0)
            last--;

        // Swap two elements in the list
        if (last >= first) {
            swap(list, first, last);
            first++;
            last--;
        }
    } while (last > first);

    swap(list, pivotIndex, first);

    return first;
}

我知道错误在于while while循环,但我不知道为什么以及如何。我不需要正确版本的分区方法......我只是想知道为什么这个错误。例如,如果我想排序[12 28 79 19 60 22 3 50 75 60 25 97 98 12 88]它给了我[3 12 19 22 25 12 28 50 60 60 75 79 88 97 98]这是错误的..

1 个答案:

答案 0 :(得分:0)

在第一行,

int pivotIndex = (first + last) / 2;

pivotIndex现在保持中间元素的位置。

E pivot = list[pivotIndex];

现在您将该值分配给pivot。

也许这就是你的代码给你错误答案的原因。

只是将小于50的元素(即中间元素)朝向左侧放置,向右放大。