gpt4 book ai didi

c++ - 快排算法问题

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:33:52 25 4
gpt4 key购买 nike

我的快速排序算法有问题。代码编译没有任何错误,但是当我尝试运行程序时,我得到的唯一输出是“随机数是:”,然后就像它需要用户输入一样,然后我必须终止程序。现在,当我在主程序中删除对快速排序函数的调用时,程序会打印出数字,但不能与对快速排序函数的调用一起使用。我不确定我使用的参数是问题还是函数本身。

#include <iostream>
#include <stdlib.h>
#include <iomanip>
#include <stack>
#include <queue>
using namespace std;

void quicksort(int arr[], int left, int right) {
int l = left;
int r = right;
int tmp;
int pivot = arr[(left + right) / 2];

while (l <= r) {
while (arr[l] < pivot)
l++;
while (arr[l] > pivot)
r--;
if (l <= r) {
tmp = arr[l];
arr[l] = arr[r];
arr[r] = tmp;
l++;
r--;
}
}

if (left < r)
quicksort(arr, left, r);
if (l < right)
quicksort(arr, r, right);

}

int main() {
int n = 20;
int testlist[n];

for (int i = 0; i<n; i++) {
testlist[i] = rand()%100;
}

cout << "The random numbers are: " << endl;
for (int i = 0; i < n; i++) cout << testlist[i] << " ";


quicksort(testlist, 0, n - 1);

cout << " " << endl;

cout << "The sorted numbers are: " << endl;
for (int i = 0; i < n; i++) {
cout << testlist[i] << " ";
}

return 0;

}

最佳答案

quicksort 函数中有一个无限循环。由于此函数永远不会返回,因此在“The random numbers are:”行之后不会打印任何内容,因为 quicksort 调用永远不会返回。随机数本身可能会或可能不会打印(并在我的系统上打印),因为系统不能保证立即将输出缓冲区刷新到屏幕。 (如果您在打印数字的 for 循环之后将 std::endl 写入 cout,它们可能会被打印出来。)

我怀疑这是问题所在:

while (arr[l] > pivot)
r--;

该语句 while (arr[l] > pivot) 实际上应该是 while (arr[r] > pivot)

关于c++ - 快排算法问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39358997/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com