快速排序的迭代

时间:2017-04-07 08:38:51

标签: c++

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

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

当我初始化那个&#39;当前&#39;语句为0,当我运行它时,它在屏幕上不显示任何内容。然后,我尝试将其替换为“低”&#39;像提供的实现中的参数,它运行得恰当。

我想问的是,为什么当我用0初始化循环语句时它不起作用,这是分配给&#39;低&#39;的相同值。参数?我已经尝试用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] << " ";
    }
}

The result when i set the 'current' value with 0

1 个答案:

答案 0 :(得分:1)

第一次调用partition时,

quicksort仅为0;它在其他调用中需要不同的值。请注意,当low第二次自行调用时,pi + 1将被分配partition

partition的开头打印出来,为一些已知的不太大的数组观察这个 - 这应该是一个很好的教育练习。我的意思是建立cout << "low = " << low << "\n"; 的第一行:

{{1}}