C+中的快速排序+;,有麻烦 我试图为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); } #包括 使用名称空间std; 无效快速排序(int A[],int p,int r); int分区(inta[],intp,intr); 内部主(空) { int元素=8; 整数[8]={2,8,7,1,3,5,6,4}; int first=0; int last=元素-1; 快速排序(编号、第一个、最后一个); cout

C+中的快速排序+;,有麻烦 我试图为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); } #包括 使用名称空间std; 无效快速排序(int A[],int p,int r); int分区(inta[],intp,intr); 内部主(空) { int元素=8; 整数[8]={2,8,7,1,3,5,6,4}; int first=0; int last=元素-1; 快速排序(编号、第一个、最后一个); cout,c++,quicksort,C++,Quicksort,我已快速测试了您的程序,对于此输入,此版本为我提供了正确的输出: 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];

我已快速测试了您的程序,对于此输入,此版本为我提供了正确的输出:

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);
}
int分区(inta[],intp,intr)
{
内部温度;
int x=A[r];
int i=p-1;
对于(int j=p;j如果(A[j]分区函数内的循环条件应为:

for (int j = p; j <= r-1; j++)

for(int j=p;j您是无限递归中的代码阻塞,在调用未定义的行为之前会消耗内存。因此,它可能会停止执行,并且不会打印任何内容

您的
分区
函数存在严重问题,虽然我无法找到您的逻辑,但您应该使用调试器来捕获该问题。请检查
I
j
变量。例如,此快速修复程序生成了一些正确的输出:

for (int j = i+1; j < r ; j++)
             ^^^      ^
for(int j=i+1;j
输出:

已排序元素:12345678


我不确定它是否适用于任何大小的数据。

如果删除
快速排序(数字、第一个、最后一个),会发生什么情况
main
中,是否仍然没有出现任何问题?如果是这样,那么问题不在于代码,而是您的程序运行不正确。如果我删除了它,元素会出现未排序的情况。您有一个运行时问题,它结束了执行,似乎在某个地方调用了未定义的行为。好的,很可能是cr在某个地方对快速排序代码进行灰化。是时候使用调试器了。
int q=0;q=partition(…);
为什么不直接编写
int q=partition(…);
就可以了。非常感谢!这也很有帮助。非常感谢!