先说说快速排序的思想:
通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
下面是我用C语言实现的快速排序的源代码,参考的是严蔚敏的数据结构那本书,如果有什么不对的地方,请各位指出,谢谢。
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
void quickSort(int array[], int size);
void _quickSort(int array[], int low, int high);
int findPivotIndex(int array[], int low, int high);
void printArray(int *array, int size);
int main(int argc, char const *argv[])
{
int size = 0;
scanf("%d", &size);
assert(size > 0);
int *array = (int *)calloc(size, sizeof(int));
int i = 0;
for (i = 0; i < size; ++i) {
scanf("%d", &array[i]);
}
quickSort(array, size);
printArray(array, size);
free(array);
return 0;
}
void quickSort(int array[], int size)
{
assert(array != NULL && size > 0);
_quickSort(array, 0, size - 1);
}
void _quickSort(int array[], int low, int high)
{
int pivotIndex = 0;
if (low < high) {
pivotIndex = findPivotIndex(array, low, high);
_quickSort(array, low, pivotIndex - 1);
_quickSort(array, pivotIndex + 1, high);
}
}
int findPivotIndex(int array[], int low, int high)
{
int pivot = array[low];
while (low < high) {
while (low < high && array[high] >= pivot) {
--high;
}
array[low] = array[high];
while (low < high && array[low] <= pivot) {
++low;
}
array[high] = array[low];
}
array[low] = pivot;
return low;
}
void printArray(int *array, int size)
{
assert(array != NULL && size > 0);
int i = 0;
for (i = 0; i < size; ++i) {
printf("%d ", array[i]);
}
printf("\n");
}
其他八种排序算法的博客: