クイックソートのメカニズムを理解しようとしていますが、今のところ理解できません。ウィキペディアによると、手順は次のとおりです。
1.リストからピボットと呼ばれる要素を選択します。
2.ピボットよりも小さい値を持つすべての要素がピボットの前に来るようにリストを並べ替え、ピボットよりも大きい値を持つすべての要素がピボットの後に来るようにします(等しい値はどちらの方向にも行くことができます)。この分割後、ピボットは最終的な位置になります。これをパーティション操作と呼びます。
3.上記の手順を、値が小さい要素のサブリストに再帰的に適用し、値が大きい要素のサブリストに個別に適用します。
そしてこれはコードです:
int partition(int arr[], int left, int right)
{
int i = left, j = right;
int tmp;
int pivot = arr[(left + right) / 2];
while (i <= j) {
while (arr[i] < pivot)
i++;
while (arr[j] > pivot)
j--;
if (i <= j) {
tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
i++;
j--;
}
}
return i;
}
void quickSort(int arr[], int left, int right) {
int index = partition(arr, left, right);
if (left < index - 1)
quickSort(arr, left, index - 1);
if (index < right)
quickSort(arr, index, right);
}
1つを除いて、すべてがどういうわけか私には明らかです。なぜパーティション関数が返さi
れ、戻らないのj
ですか?