快速排序(C语言版)

来源:互联网 发布:linux vnc 安装 编辑:程序博客网 时间:2024/05/22 11:52

先说说快速排序的思想

通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

下面是我用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");}

其他八种排序算法的博客:

常见的9种内部排序(C语言实现)



0 0