这应该是quicksort算法的一个实现。但是当我运行它时,它会一直持续下去而不显示任何东西。我试图找到问题,但现在太累了。请帮忙。
#include <stdio.h>
void quicksort(int arr[], int pivotIndex,int right);
int partition(int a[],int left,int right);
int main()
{
int arr[5] = {5, 4,2, 3, 6};
int left = 0;
int right = 4;
quicksort(arr, left, right);
for (int i = 0; i < 5; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
void quicksort(int arr[], int left,int right)
{
if (left < right)
{
int pivotNewIndex = partition(arr, left, right);
quicksort(arr, left, pivotNewIndex - 1);
quicksort(arr, pivotNewIndex + 1, right);
}
}
int partition(int a[],int left,int right)
{
int i = left;
int j = right;
int pivotIndex = left;
int temp;
while (i < j)
{
while (a[pivotIndex] <=a[j])
{
j--;
}
if (a[pivotIndex] > a[j])
{
temp = a[pivotIndex];
a[pivotIndex] = a[j];
a[j] = temp;
pivotIndex = j;
}
while (a[pivotIndex] <= a[j])
{
i++;
}
if (a[pivotIndex] < a[j])
{
temp = a[pivotIndex];
a[pivotIndex] = a[j];
a[j] = temp;
pivotIndex = i;
}
}
return pivotIndex;
}
答案 0 :(得分:1)
测试
if (left < right)
将永远为真,因为您从不修改 left 或 right 变量(您将它们通过值传递给其他函数,因此您正在修改副本)。
您正在以递归方式执行此测试,其中左/右值永不改变。
PS:我不知道这是你的程序/算法的唯一问题
答案 1 :(得分:0)
可能(我不测试)
应该是
while (i<j && a[pivotIndex] <=a[j])
{
j--;
}
if (a[pivotIndex] > a[j])
{
temp = a[pivotIndex];
a[pivotIndex] = a[j];
a[j] = temp;
pivotIndex = j;
}
while (i<j && a[pivotIndex] >= a[i])
{
i++;
}
if (a[pivotIndex] < a[i])
{
temp = a[pivotIndex];
a[pivotIndex] = a[i];
a[i] = temp;
pivotIndex = i;
}