C语言中的快速排序算法

C语言中的快速排序算法,c,algorithm,recursion,quicksort,C,Algorithm,Recursion,Quicksort,我正试图为快速排序算法编写一个递归程序。以下是我目前的代码: void QuickSort(int *array, int first, int last){ int q; if (first<last){ q = partition(array,first,last); QuickSort(array,first,q-1); QuickSort(array,q+1,last); } } void partition(int *A, int p, in

我正试图为快速排序算法编写一个递归程序。以下是我目前的代码:

void QuickSort(int *array, int first, int last){
  int q;
  if (first<last){
    q = partition(array,first,last);
    QuickSort(array,first,q-1);
    QuickSort(array,q+1,last);
  }
}

void partition(int *A, int p, int r){
  int value = A[r];
  i = p-1;
  int tmp;
  for (j = p; j<=r; j++){
    if (A[j] <= value) {
      i++;
      tmp = A[i];
      A[i] = A[j];
      A[j] = tmp;
    }
  }
return(i);
}

int main(){                                                                            
  int numArray[8] = {30,15,11,40,75,80,70,60};
  int i;

  printf("Before sorting: \n");
  for (i = 0; i<8; i++) printf("numArray[%d] = %d\n", i, numArray[i]);

  int first = 0;
  int last = sizeof(numArray)/sizeof(numArray[0]);
  QuickSort(numArray,first,last-1);

  printf("After sorting: \n");
  for (i = 0; i<8; i++) printf("numArray[%d] = %d\n", i, numArray[i]);
}
void快速排序(int*array,int first,int last){
int-q;

如果(首先这是我对你的提纲所做的,它似乎工作正常,排序也很好。 我用int替换了void,并声明int是必要的

#include<iostream>
using namespace std;


int partition(int *A, int p, int r){
    int value = A[r];
    int i = p-1;
    int tmp;
    for (int j = p; j<=r; j++){
        if (A[j] <= value) {
        i++;
        tmp = A[i];
        A[i] = A[j];
        A[j] = tmp;
        }
   }
return(i);
}
void QuickSort(int *array, int first, int last){
    int q;
    if (first<last){
        q = partition(array,first,last);
        QuickSort(array,first,q-1);
        QuickSort(array,q+1,last);
    }
}



int main(){
    int numArray[8] = {30,15,11,40,75,80,70,60};

    printf("Before sorting: \n");
    for (int i = 0; i<8; i++) printf("numArray[%d] = %d\n", i, numArray[i]);

    int first = 0;
    int last = sizeof(numArray)/sizeof(numArray[0]);
    QuickSort(numArray,first,last-1);

    printf("After sorting: \n");
    for (int i = 0; i<8; i++) printf("numArray[%d] = %d\n", i, numArray[i]);
}
#包括
使用名称空间std;
整数分区(整数*A,整数p,整数r){
整数值=A[r];
int i=p-1;
int tmp;

对于(int j=p;j代码有许多错误,这些错误阻止了它的编译。一旦这些错误被修复,代码就可以为我工作了。一个有趣的修复方法是将
分区
更改为返回
int
,而不是
void
我的注释实际上从一开始就遍历了整个数组,而枢轴实际上是数组中的最后一个数字y、 我明白你的意思,但我们(作为我学院的算法课)只从一开始工作,而不是像你建议的那样从数组的两端工作。我的意思是说“代码”而不是“注释”above@user3342662-不要编辑你文章的重要原始内容。当其他人试图解决某个问题时,这会使事情变得混乱,然后你所说的问题突然被改变或消除。@ryk呃,我所做的唯一更改是在main()函数中声明“int I”,因为下面的一个用户说它没有声明,而在我的程序中,我实际上将“I”声明为一个全局变量。否则,代码就没有改动。所以,作为对你评论的回应,我真的不知道这是怎么回事。