编辑代码

#include <stdio.h>

// 打印数组的函数
void printArray(int array[], int arrLen) {
    for (int i = 0; i < arrLen; ++i) {
        printf("%d ", array[i]);
    }
    printf("\n");
}

// 快速排序中的分区函数
int partition(int array[], int arrStart, int arrEnd, int pivotPos) {
   int pivotValue = array[pivotPos];
   array[pivotPos] = array[arrEnd - 1];
   int i = arrStart;

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

   array[arrEnd - 1] = array[i];
   array[i] = pivotValue;

   return i; // 返回基准值的新位置
}

// 寻找基准值的位置
int findPivotPos(int array[], int arrStart, int arrEnd) {
    int mid = arrStart + (arrEnd - arrStart) / 2;
    // 在这里实现寻找中值的逻辑,可以使用三数取中法等
    // ...
    return mid; // 返回中间位置的索引作为基准值的位置
}

// 快速排序函数
void quickSort(int array[], int arrStart, int arrEnd) {
    if (arrEnd - arrStart <= 1) {
        return; // 如果数组长度小于等于1,则已经有序,直接返回
    }

    int pivotPos = findPivotPos(array, arrStart, arrEnd); // 寻找基准值的位置
    int pivotOrderedPos = partition(array, arrStart, arrEnd, pivotPos); // 对数组进行分区操作

    quickSort(array, arrStart, pivotOrderedPos); // 递归排序左半部分
    quickSort(array, pivotOrderedPos + 1, arrEnd); // 递归排序右半部分
}

int main() {
    int array0[] = {};
    int arrayLen = sizeof(array0) / sizeof(int);
    printArray(array0, arrayLen);
    quickSort(array0, 0, arrayLen);
    printArray(array0, arrayLen);
    printf("=========================================\n");
    int array1[] = {1};
    arrayLen = sizeof(array1) / sizeof(int);
    printArray(array1, arrayLen);
    quickSort(array1, 0, arrayLen);
    printArray(array1, arrayLen);
    printf("=========================================\n");
    int array2[] = {1,5,2,7,9};
    arrayLen = sizeof(array2) / sizeof(int);
    printArray(array2, arrayLen);
    quickSort(array2, 0, arrayLen);
    printArray(array2, arrayLen);

    return 0;
}