嗯,任务是只用一个函数在 C++ 上编写快速排序,没有“低”和“高”变量函数参数。这是我的功能:
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <chrono>
#include <utility>
using namespace std;
void print_arr(const int* arr, int size) {
for (int i{ 0 }; i < size; i++)
cout << arr[i] << " ";
cout << endl;
}
void sort_quick(int* arr, int size) {
int mid{ arr[size / 2] }, i{ 0 }, j{ size - 1 };
while (true) {
while (arr[i] < mid)
i++;
while (arr[j] > mid)
j--;
if (i >= j)
break;
else
swap(arr[i], arr[j]);
}
if (j > 0)
sort_quick(arr, j); // most likely trouble is here
if (i < size)
sort_quick(arr + i + 1, size - i - 1); //or here
}
int main() {
int size{ 10 };
int * arr{ new int[size] };
srand(unsigned(time(nullptr)));
for (int i{ 0 }; i < size; i++)
arr[i] = rand() % 999 + 1;
cout << "Quick Sort" << endl;
sort_quick(arr, size);
print_arr(arr, size);
}
数组由 0 到 999 的数字随机分配。 问题是这个函数只适用于小于 50 的数组。我不知道如何修复它。我该怎么办?