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