我现在正尝试快速排序。但是,我对下面的循环部分有一些问题
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] << " ";
}
}
答案 0 :(得分:1)
partition
时, quicksort
仅为0;它在其他调用中需要不同的值。请注意,当low
第二次自行调用时,pi + 1
将被分配partition
。
在partition
的开头打印出来,为一些已知的不太大的数组观察这个 - 这应该是一个很好的教育练习。我的意思是建立cout << "low = " << low << "\n";
的第一行:
{{1}}