在快排中,這樣的數組元素被稱為樞軸——其前面的元素全都小於它(或大於),其後面的元素全都大於它(或小於)。如此,我們很容易想到,對於一個數組,如果其全部元素都可以被稱為樞軸,那麼,該數組就是一個已經排序好的數組。
參考代碼:
#include <stdlib.h>#include <stdio.h>#include <string.h>static int partition(void* arr, int(*cmp)(void*, void*), int left, int right, int size){ char* tmp = (char*)malloc(size); memcpy(tmp, (char*)arr + left * size, size); while (left < right) { while (left < right && cmp((char*)arr + right * size, (char*)tmp) >= 0)--right; memcpy((char*)arr + left * size, (char*)arr + right * size, size); while (left < right && cmp((char*)arr + left * size, (char*)tmp) <= 0)++left; memcpy((char*)arr + right * size, (char*)arr + left * size, size); } memcpy((char*)arr + right * size, (char*)tmp, size); return right;}static void q_sort(void* arr, int(*cmp)(void*, void*), int left, int right, int size){ if (right <= left) return; int part = partition(arr, cmp, left, right, size); q_sort(arr, cmp, left, part - 1, size); q_sort(arr, cmp, part + 1, right, size);}void quicksort(void* arr, int n, int(*cmp)(void*, void*), int size){ q_sort(arr, cmp, 0, n - 1, size);}