编辑代码

#include <stdio.h>
#include <string.h>

// 返回基准值在数组中的位置
int findPivotPos(int array[], int arrStart, int arrEnd) {
    return arrStart;
}

// 根据基准值进行分区,把比基准值大的元素放右边,小的元素放左边
// 返回值:基准值在排序后的位置
int partition(int array[], int arrStart, int arrEnd, int pivosPos) {
    int pivosValue = array[pivosPos];
    array[pivosPos] = array[arrEnd - 1];

    int ItPivosValueCount = 0;
    for (int i = arrStart; i < arrEnd - 1; i++) {
        if (array[i] < pivosValue) {
            int temp = array[arrStart + ItPivosValueCount];
            array[arrStart + ItPivosValueCount] = array[i];
            array[i] = temp;
            ++ItPivosValueCount;
        }
    }
    array[arrEnd - 1] = array[arrStart + ItPivosValueCount];
    array[arrStart + ItPivosValueCount] = pivosValue;

    return arrStart + ItPivosValueCount;
}

void quickSort(int array[], int arrStart, int arrEnd) {

    // 写出递归的终止条件
    if (arrEnd - arrStart <= 1) {
        return;
    }

    // 从数组中找一个基准值
    int pivosPos = findPivotPos(array, arrStart, arrEnd);

    // 分区
    int pivosOrderedPos = partition(array, arrStart, arrEnd, pivosPos);

    // 递归调用
    quickSort(array, arrStart, pivosOrderedPos);
    quickSort(array, pivosOrderedPos+1, arrEnd);

}

int main() {

    int array[] = {};
    int arrLen = sizeof(array) / sizeof(int);
    quickSort(array, 0, arrLen);
    for (int i = 0; i < arrLen; ++i) {
        printf("%d ", array[i]);
    }
    printf("\n");

    printf("==============================\n");

    int array0[] = {1};
    arrLen = sizeof(array0) / sizeof(int);
    quickSort(array0, 0, arrLen);
    for (int i = 0; i < arrLen; ++i) {
        printf("%d ", array0[i]);
    }
    printf("\n");

    printf("==============================\n");

    int array1[] = {11, 8, 3, 9, 7, 1, 2, 5};
    arrLen = sizeof(array1) / sizeof(int);
    quickSort(array1, 0, arrLen);
    for (int i = 0; i < arrLen; ++i) {
        printf("%d ", array1[i]);
    }
    printf("\n");

    printf("==============================\n");

    int array2[] = {11, -8, 3, -9, 7, -1, 2, -5};
    arrLen = sizeof(array2) / sizeof(int);
    quickSort(array2, 0, arrLen);
    for (int i = 0; i < arrLen; ++i) {
        printf("%d ", array2[i]);
    }
    printf("\n");

    return 0;
}