#include <stdio.h>
#define ARRAY_SIZE 10
void lomuto (int A[], int l, int r, int smallerAtLeft)
{
if (smallerAtLeft == 1) //move elements smaller than pivot to the left and the greater ones to the right
{
int tmp, tmp2,pivot,i,j;
pivot = A[r];
i = l-1;
for (j =0; j<r-1; j++)
{
if (A[j] <= pivot)
{
i++;
tmp = A[i];
A[i] = A[j];
A[j] = tmp;
}
}
tmp2 = A[i+1];
A[i+1] = A[r];
A[r] = tmp2;
}
if (smallerAtLeft == 0) //move elements smaller than pivot to the right and the greater ones to the left
{
int tmp3, tmp4,pivot,i,j;
pivot = A[r];
i = l-1;
for (j=0; j<r-1; j++)
{
if (A[j]>= pivot)
{
i++;
tmp3 = A[i];
A[i] = A[j];
A[j] = tmp3;
}
}
tmp4 = A[i+1];
A[i+1] = A[r];
A[r] = tmp4;
}
}
void quicksort (int A[], int l, int r, int ascending)
{
lomuto (A,l,r,ascending);
}
int main()
{
int testarray;
int testArray[ARRAY_SIZE] = {4, 2, 5, 3, 6, 7, 8, 1, 0};
quicksort (testarray,0,8,1);
return testarray;
}
晚上好。
通常,我会在代码中搜索几乎每个论坛和最深层的帖子中的欺骗性。
但是这次我没有找到可以帮助我的答案。如果有人能告诉我为什么代码exe停止工作,但在编译过程中没有在屏幕上显示错误,我将非常感激。
我们必须使用lomuto分区来实现quicksort算法。如果变量“smallerAtLeft”等于1,则该数组应按递增属性排序,如果其等于0则递减。
此外,我们必须实现使代码中所见的函数无效。包含lomuto的“lomuto-fct”和“quicksort-fct”。
也许这个反向Lomuto线程将来也会帮助其他人。
最佳答案
我认为您不了解main
的返回值是什么以及它的用途。它通常是成功和失败的指标,典型值0
表示成功,而小的正值表示失败。甚至在<stdlib.h>
头文件 EXIT_SUCCESS
and EXIT_FAILURE
中为此定义了宏。
如果要查看排序的数组,则需要打印它:
printf("Sorted array = {");
for (unsigned i = 0; i < ARRAY_SIZE; ++i)
{
printf(" %d", testArray[i]);
}
printf(" }\n");
当然,这需要您将实际数组传递给排序函数。
关于c - C-Lomuto Quicksort Exe无法正常工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43147644/