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”声明为一个全局变量。否则,代码就没有改动。所以,作为对你评论的回应,我真的不知道这是怎么回事。