用C ++编写快速排序算法

时间:2018-02-09 04:08:34

标签: c++ quicksort

我已经编写了一个用于在c ++中快速排序的代码,但它为少数输入提供了错误。例如:在输入元素数= 5且输入为5 4 3 2 1时,它显示一次迭代的错误输出。只有在按递减顺序输入连续数字时才会输出错误信息。

#define MAX 100
class quicksort
{
  public:
    int arr[MAX], n;
    void getdata();
    void quick(int, int);
    void display();
};
void quicksort::getdata()
{
    int i;
    cout << "\nEnter Array Size : ";
    cin >> n;
    cout << "\nEnter Array Elements : ";
    for (i = 0; i < n; i++)
    {
        cout << "\nEnter Element [" << i << "] : ";
        cin >> arr[i];
    }
}
void quicksort::quick(int start, int end)
{
    int pivot = start, i = pivot + 1, j = end, temp;
    while (i <= j)
    {
        while (arr[i] < arr[pivot])
        {
            if (i == end - 1 || j <= i)
                break;
            i++;
        }
        while (arr[j] >= arr[pivot])
        {
            j--;
            if (j < i)
                break;
        }
        if (i < j)
        {
            temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
        }
        else
        {
            temp = arr[j];
            arr[j] = arr[pivot];
            arr[pivot] = temp;
        }

        if (j != start)
            quick(start, j - 1);
        if (j != end)
            quick(j + 1, end);
    }
}

int main()
{
    quicksort s;
    s.getdata();
    s.quick(0, (s.n - 1));
    s.display();
    return 0;
}

0 个答案:

没有答案