快速排序迭代
Iteration on Quick Sort
我现在正在尝试实现快速排序。但是,我对下面的循环部分有一些问题
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";
相关文章:
- 高级选择排序 - 在一次迭代中搜索两个元素
- 无法使用自定义迭代器进行排序
- 比较迭代器会使程序崩溃,而不会在自定义气泡排序实现中出现错误
- 在C++中使用迭代器合并排序
- 使用迭代器进行合并排序中的一个缓冲区
- 如何使equal_range迭代器在 Boost 多索引中按不同的索引排序?
- 使用迭代器对 std::list 进行排序
- 迭代快速排序方法的分区算法问题
- 如何对迭代器的模板专业化进行排序?
- 使用迭代器 c++ 进行排序
- 从卷或区域中的起点向外迭代,而不对其进行排序
- 通过反向迭代器从矢量快速删除
- 我正在写一个快速的形式,可以跟踪迭代次数.但是,计数每次返回0.我怎样才能解决这个问题
- 快速排序迭代
- 迭代排序列表并计算不同的数字
- 迭代合并排序,工作速度与气泡排序相同
- 在双向迭代器上实现快速排序
- 排序后的数据结构通过迭代器快速迭代、插入、删除
- C++ 由于堆栈溢出,迭代合并排序的实现在大输入大小时崩溃
- Vector迭代器在实现快速排序时不可解引用