目前试图弄清楚这种问题是什么。直接从 Wikipedia 的就地 Quicksort 伪代码构建,我将假设它是可靠的。我正在尝试按以空字符结尾的 3 字符“代码”字段对结构数组进行排序。
排序主要是有效的,但总是有一些元素不合适。我只能假设这与枢轴有关,但我花了几个小时盯着它看,却一无所获。谢谢!
void quicksort(Cdir *directory, int left, int right) {
if (left < right) {
int pivotIdx = left;
pivotIdx = partition(directory, left, right, pivotIdx);
quicksort(directory, left, pivotIdx - 1);
quicksort(directory, pivotIdx + 1, right);
}
}
int partition(Cdir *directory, int left, int right, int pivot) {
char *pivotVal = directory[pivot].code;
int curIdx = left;
swap(&directory[pivot], &directory[right]);
int i;
for (i = left; i < right; i++) {
if (strncmp(directory[i].code, pivotVal, 3) < 0) {
swap(&directory[i], &directory[curIdx]);
curIdx++;
}
}
swap(&directory[curIdx], &directory[right]);
return curIdx;
}
void swap(Cdir *s1, Cdir *s2) {
Cdir temp = *s1;
*s1 = *s2;
*s2 = temp;
}