Smallzhou? 2021-06-09 15:57 采纳率: 0%
浏览 13

想问下各位大佬这个快速排序哪错了?执行程序没有结果

#include <stdio.h>

void QuickSort(int A[],int i,int j){

 int begin,end;

   begin= i;

   end=j;

 if(i<j){

  A[0]=A[i];

  while(i<j){

   while(i<j&&A[j]>A[0]) j--;

   A[i]=A[j];

      while(i<j&&A[i]<A[0]) i++;

   A[j]=A[i];

  }

     A[i]=A[0];

     QuickSort(A,begin,i-1);

     QuickSort(A,i+1,end);

 }

 I 

 

int main(void){

 int A[]={0,1,32,44,32,55,78,9,0,29,10};

 int i;

 QuickSort(A,1,10);

 for(i=1;i<11;i++)

 printf("%d ",A[i]);

 return 0;

}

 

  • 写回答

1条回答 默认 最新

  • shn_baby 2021-06-09 16:14
    关注

    你的代码在找到比标定值大和小之后交换的时候就出错了。

    建议你参照一下这个文章叭

    void Quick_Sort(int *arr, int begin, int end)
    {
        if(begin > end)
            return;
        int tmp = arr[begin];
        int i = begin;
        int j = end;
        while(i != j)
        {
            while(arr[j] >= tmp && j > i)
                j--;
            while(arr[i] <= tmp && j > i)
                i++;
            if(j > i)
            {
                int t = arr[i];
                arr[i] = arr[j];
                arr[j] = t;
            }
        }
        arr[begin] = arr[i];
        arr[i] = tmp;
        Quick_Sort(arr, begin, i-1);
        Quick_Sort(arr, i+1, end);
    }
    

    https://blog.csdn.net/qq_40941722/article/details/94396010

    评论

报告相同问题?