【发布时间】:2018-01-31 06:56:06
【问题描述】:
我在快速排序方面遇到了一点问题。我所做的算法执行并在最后打印数字。但是没有订购。看看能不能找出什么破绽?你能帮帮我吗?
#include <stdio.h>
#include <stdlib.h>
int partition (int numbers[], int arrayStart, int arrayEnd) {
int pivot = numbers[arrayEnd];
int partitionIndex = arrayStart;
for (int i = arrayStart; i < arrayEnd; i++) {
if (numbers[i] <= pivot) {
int temp = numbers[partitionIndex];
numbers[partitionIndex] = numbers[i];
numbers[i] = temp;
partitionIndex = partitionIndex + 1;
}
int temp2 = numbers[partitionIndex];
numbers[partitionIndex] = numbers[arrayEnd];
numbers[arrayEnd] = temp2;
return partitionIndex;
}
}
void QuickSort (int numbers[], int arrayStart, int arrayEnd) {
if (arrayStart < arrayEnd) {
int partitionIndex = partition (numbers, arrayStart, arrayEnd);
QuickSort(numbers, arrayStart, partitionIndex - 1);
QuickSort(numbers, partitionIndex + 1, arrayEnd);
}
else {
return;
}
}
int main() {
int numbers[6] = {2, 5, 1, 6, 3, 4};
int arrayStart = 0;
int arrayEnd = 5;
QuickSort(numbers, arrayStart, arrayEnd);
for (int i = 0; i < 6; i++) {
printf("%d ", numbers[i]);
}
}
【问题讨论】:
-
考虑使用调试器
-
使用你的调试器。分区后检查阵列。它看起来确实是分区的吗?
-
顺便考虑用指针+长度来表示数组的一个切片。指针+startIndex+endIndex 工作量太大。
-
partition函数中的return是在循环内部还是外部?外部似乎更合理。您的编译器可能会抱怨您并不总是从函数返回值。注意你的编译器;它比你更了解 C。 (如果它没有抱怨,请调高警告级别,或获得更好的编译器。)
标签: c algorithm sorting quicksort