我试图为C ++编写这个算法,但是当我尝试运行它时,什么都没有出现。我已经根据错误看了一切,但我无法找到它。我没有在一年内编程,所以我回到了原点。任何帮助将不胜感激,谢谢。
#include <iostream>
using namespace std;
void quickSort(int A[], int p, int r);
int partition(int A[], int p, int r);
int main(void)
{
int elements = 8;
int number[8] = { 2, 8, 7, 1, 3, 5, 6, 4 };
int first = 0;
int last = elements - 1;
quickSort(number, first, last);
cout << "Sorted elements: ";
for (int i = 0; i < elements; i++)
{
cout << number[i] << " ";
}
cout << endl;
return 0;
}
void quickSort(int A[], int p, int r)
{
if (p < r)
{
int q= 0;
q = partition(A, p, r);
quickSort(A, p, q - 1);
quickSort(A, q + 1, r);
}
}
int partition(int A[], int p, int r)
{
int temp;
int x = A[r];
int i = p - 1;
for (int j = 0; j < r - 1; j++)
{
if (A[j] <= x)
{
i++;
temp = A[j];
A[j] = A[i];
A[i] = temp;
}
}
temp = A[r];
A[r] = A[i + 1];
A[i + 1] = temp;
return (i+1);
}
答案 0 :(得分:1)
我已经快速测试了你的程序,对于这个输入,这个版本给了我正确的输出:
int partition(int A[], int p, int r)
{
int temp;
int x = A[r];
int i = p - 1;
for (int j = p; j < r; j++)
{
if (A[j] <= x)
{
i++;
temp = A[j];
A[j] = A[i];
A[i] = temp;
}
}
temp = A[r];
A[r] = A[i + 1];
A[i + 1] = temp;
return (i+1);
}
更改是在循环限制中。
答案 1 :(得分:1)
分区函数中的循环条件应为:
for (int j = p; j <= r-1; j++)
那应该解决它。
答案 2 :(得分:1)
你的代码卡在无限递归中并消耗内存,直到调用未定义的行为。因此,它可能会停止执行并且不打印任何内容。
您的partition
函数存在严重问题,而我无法找到您的逻辑,您应该使用调试器来捕获问题。检查您的i
和j
变量。例如,这个快速修复使一些输出正确:
for (int j = i+1; j < r ; j++)
^^^ ^
输出:
分类元素:1 2 3 4 5 6 7 8
我不确定它是否适用于任何大小的数据。 Live code