Светлая тема /
тёмная тема
Реализация быстрой сортировки со следующими аргументами функции: указатель на начало массива и его размер. В предыдущей реализации нумерация элементов подмассива всегда велась относительно начала исходного массива, в рекурсивные вызовы передавались аргументы left и right, обозначающие границы подмассивов.
Как и ранее, подмассив, с которым работает конкретный рекурсивный вызов, выделен чёрным цветом и подчёркнут синей линией. Для большей наглядности показано data[0] (значение самого левого элемента текущего подмассива).
Опорный элемент:
function quickSort(data*, size) {pivot = data[size / 2];l = 0, r = size - 1;while (l <= r){while (l < size && data[l] < pivot){++l;}while (r >= 0 && data[r] > pivot){--r;}if (l == r && l == 0){++l;}if (l == r && l == size - 1){--r;}if (l < r){swap(data[l], data[r]);++l;--r;} else {break;} }if (l > 1){quickSort(&data[0], l);}if (size - l > 1){quickSort(&data[l], size - l);} }