快速排序迭代

Iteration on Quick Sort

本文关键字:迭代 快速排序      更新时间:2023-10-16

我现在正在尝试实现快速排序。但是,我对下面的循环部分有一些问题

for (int current = 0; current <= high - 1; current++)

当我用 0 初始化该"当前"语句时,当我运行它时,它在屏幕上不显示任何内容。然后,我尝试用"low"参数替换它,就像在提供的实现中一样,并且它被适当地运行了。

我想问的是,为什么当我用 0 初始化循环语句时它不起作用,这与分配给"low"参数的值相同?我尝试用 0 初始化新变量并将该变量用于循环,但它给出的结果与我直接用 0 分配循环语句时的结果相同。谢谢你的回答。

这里的代码:

int partition(int arr[], int low, int high)
{
    int pivot = arr[high];
    int index = (low - 1);
    for (int current = low; current <= high - 1; current++)
    {
        if (arr[current] <= pivot)
        {
            index++;
            swap(arr[index], arr[current]);
        }
    }
    swap(arr[index+1], arr[high]);
    return (index + 1);
}
void quicksort(int arr[], int low, int high)
{
    if (low < high)
    {
        int pi = partition(arr, low, high);
        quicksort(arr, low, pi - 1);
        quicksort(arr, pi + 1, high);
    }
}

int main()
{
    int arr[] = { 3, 4, 2, 5, 1 };
    int n = sizeof(arr)/sizeof(arr[0]);
    quicksort(arr, 0, n-1);
    for (int i = 0; i < n; i++)
    {
        cout << arr[i] << " ";
    }
}

我将"当前"值设置为 0 时的结果

low

第一次调用partition时只有0;在其他调用中它采用不同的值。请注意,当quicksort第二次调用自己时,low将被分配pi + 1

partition开头打印出来,以观察一些已知的不太大的数组 - 这通常是一个很好的教育练习。我的意思是做第一行partition

cout << "low = " << low << "n";