【发布时间】:2019-05-01 08:09:36
【问题描述】:
这是c中快速排序算法的实现,对于给定的输入,我的程序给出的输出为4 5 -343534 1,我是编程新手,如果你能指出我的错误,那将非常有帮助
#include<stdio.h>
#include<stdlib.h>
int partition(int* A, int start, int end) {
int pivot = A[end];
int pindex = start;
for (int i = 0; i < end; i++) {
if (A[i] <= pivot) {
int temp = A[i];
A[i] = A[pindex];
A[pindex] = temp;
pindex = pindex + 1;
}
}
int temp = A[end];
A[end] = A[pindex];
A[pindex] = temp;
return pindex;
}
void quicksort(int* A, int start, int end) {
if (start < end) {
int pindex = partition(A, start, end);
quicksort(A, start, pindex - 1);
quicksort(A, pindex+1, end);
}
}
int main() {
int* a = (int*)malloc(sizeof(int) * 4);
a[0] = 1;
a[1] = 5;
a[2] = 4;
a[3] = 2;
quicksort(a, 0, 3);
printf("%d %d %d %d", a[0], a[1], a[2], a[3]);
system("pause");
}
【问题讨论】:
-
我认为一个问题是您没有使用标准的
qsort函数。但如果这是学校(或类似的)作业,那很自然。 -
至于你展示的代码有问题,建议你learn how to debug your programs。
-
尝试在纸上“执行”代码。
-
很久没有写过 C 语言了,但是如果我没记错的话,指针分配的数组的工作方式会有所不同。 mathcs.emory.edu/~cheung/Courses/255/Syllabus/2-C-adv-data/… 这可能会让您对问题所在有所了解。
-
一个明显的错字:
for (int i = 0; i < end; i++) {应该是for (int i = start; i < end; i++) {