現在、この種の問題が何であるかを把握しようとしています。ウィキペディアのインプレース Quicksort 疑似コードから直接構築されています。これは信頼できると思います。null で終わる 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;
}