Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 无法调试我的快速排序程序 #包括 整数分区(整数*A,整数p,整数r) { printf(“分区\n”); int x=0; x=A[r]; int i=p-1,j=r+1; 内部温度; int k=0; 而(1) { printf(“\tLOOP\n”); 做 { j=j-1; }而(A[j]>x); 做 { i=i+1; }而(A[i]_C_Sorting - Fatal编程技术网

C 无法调试我的快速排序程序 #包括 整数分区(整数*A,整数p,整数r) { printf(“分区\n”); int x=0; x=A[r]; int i=p-1,j=r+1; 内部温度; int k=0; 而(1) { printf(“\tLOOP\n”); 做 { j=j-1; }而(A[j]>x); 做 { i=i+1; }而(A[i]

C 无法调试我的快速排序程序 #包括 整数分区(整数*A,整数p,整数r) { printf(“分区\n”); int x=0; x=A[r]; int i=p-1,j=r+1; 内部温度; int k=0; 而(1) { printf(“\tLOOP\n”); 做 { j=j-1; }而(A[j]>x); 做 { i=i+1; }而(A[i],c,sorting,C,Sorting,您在代码中犯了很多错误 快速排序(A,p,q);是快速排序(A,p,q-1) inti=p-1,j=r+1;不是必需的 您的分区() while(A[i]您可以将您的实现与参考C实现进行比较—精确的伪代码?QuickSort有很多不同的变体,有很多不同的伪代码;提供指向您使用的伪代码的链接是明智的。此外,如果您完全遵循精确的伪代码,您的快速排序将正常工作(除非你找到了一个坏掉的伪代码进行快速排序)。由于它不起作用,我们不得不推断你是人类,而不是机器,你在将伪代码翻译成C代码时犯了一个错误。 #

您在代码中犯了很多错误

  • 快速排序(A,p,q);
    快速排序(A,p,q-1)

  • inti=p-1,j=r+1;
    不是必需的

  • 您的
    分区()


  • while(A[i]您可以将您的实现与参考C实现进行比较—精确的伪代码?QuickSort有很多不同的变体,有很多不同的伪代码;提供指向您使用的伪代码的链接是明智的。此外,如果您完全遵循精确的伪代码,您的快速排序将正常工作(除非你找到了一个坏掉的伪代码进行快速排序)。由于它不起作用,我们不得不推断你是人类,而不是机器,你在将伪代码翻译成C代码时犯了一个错误。
    
    #include <stdio.h>
    
    
    int Partition (int * A, int p, int r)
    {
        printf("PARTITION\n");
        int x=0;
        x=A[r];
        int i=p-1, j=r+1;
        int temp;
        int k=0;
        while(1)
        {
            printf("\tLOOP\n");
            do
            {
                j=j-1;
            } while(A[j]>x) ;
    
            do
            {
                i=i+1;
            } while(A[i]<x);
    
            if (i<j)
            {
                temp=A[i];
                A[i]=A[j];
                A[j]=temp;
            }
            else
            {
                printf ("ARRAY: ");
                for (k=p; k<=r; k++)
                    printf ("%d,",A[k]);
                printf ("\nRETURNING : %d \n", j);
    
                return j;
            }
    
        }
    }
    void QuickSort(int * A, int p, int r)
    {
        int q;
        if (p<r)
        {
            q = Partition (A,p,r);
            QuickSort(A,p,q);
            QuickSort(A,q+1,r);
        }
    
    }
    
    
    
    int main()
    {
        int A[9] = {9,2,4,1,7,8,3,5,6};
        int i;
        QuickSort(A,0,8);
        for (i=0;i<=8;i++)
        {
            printf("%d ", A[i]);
        }
        return 0;
    }
    
    #include <stdio.h>
    
    
    int Partition (int  *A, int p, int r)
    {
        printf("PARTITION\n");
        int i=p, j=r ,piv=p ;
        int temp;
    
        while(i<j)
        {
            printf("\tLOOP\n");
    
           while(A[i] <= A[piv] && i<r)
               i++;
    
           while(A[j]>A[piv]) 
               j--;
    
    
                if (i<j)
                {
                    temp=A[i];
                    A[i]=A[j];
                    A[j]=temp;
                }
        }
    
    /*Crucial step that you happen to miss*/
             temp=A[piv];
             A[piv]=A[j];
             A[j]=temp;
    
    return j;
    }
    
    
    void QuickSort(int *A, int p, int r)
    {
        int q;
        if (p<r)
        {
            q = Partition (A,p,r);
            QuickSort(A,p,q-1);
            QuickSort(A,q+1,r);
        }
    }
    
    
    
    int main()
    {
        int A[9] = {9,2,4,1,7,8,3,5,6};
        int i;
        QuickSort(A,0,8);
        for (i=0;i<=8;i++)
        {
            printf("%d ", A[i]);
        }
        return 0;
    }