C -快速排序程序不工作



这应该是快速排序算法的一个实现。但是当我运行它的时候,它一直在运行,没有显示任何东西。我试图找到问题所在,但现在太累了。请帮助。

#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;
}

测试

if (left < right)

将永远为真,因为您从不修改变量(您通过值将它们传递给其他函数,因此您在修改副本)。

你正在递归地做这个测试,左/右的值永远不会改变。

p。我不知道这是否是你的程序/算法的唯一问题

可能(我不测试)

应该

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;
}

相关内容

  • 没有找到相关文章

最新更新