クイックソートアルゴリズムに問題があります。コードはエラーなしでコンパイルされますが、プログラムを実行しようとすると「乱数は次のようになります」という出力が得られ、ユーザーからの入力が必要なように動作し、プログラムを終了する必要があります。今私のメインプログラムでクイックソート機能の呼び出しを取り除くと、プログラムは数字を出力しますが、クイックソート機能の呼び出しでは機能しません。私が使用しているパラメータが問題であるかどうか、それが関数そのものかどうかはわかりません。クイックソートアルゴリズムの問題
#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;
}
提案:普通の 'l'(小文字のL)は' 1'のように見えますが、これはコードを読むときに混乱します。 –