快速排序 quicksort
快速排序是一种最常见的高效排序算法,时间复杂度为 O ( n 2 ) ,但是平均的时间复杂度是 O(n·lgn) 。而且可以证明,随机选取参照值的快速排序的时间复杂度期望值为 O(n·lgn) 。 C语言中已经存在快速排序的函数qsort: #include <stdlib.h> void qsort(void *base, size_t nmemb, size_t size, int(*compar)(const void *, const void *)); 本文 仿照该函数的结构,提供了 随机化快速排序的一种实现,还包括了两个可以作为函数指针参数的比较函数,分别是整形比较函数comparInt和字符串比较函数comparStr。 #include <stdio.h> #include <string.h> #include <stdlib.h> void *quicksort(void *base, size_t nmeb, size_t size, int(*compar)(const void *, const void *)) { if (nmeb < 2) return; int i, j, key; key = rand() % nmeb; swap(base, base + key * size, size); i = 1; j = nmeb - 1; while