编辑代码

#include <iostream>
using namespace std;

void printArray(int array[], int arrLen) {
    for (int i = 0; i < arrLen; ++i) {
        cout << array[i] << " ";
    }
    cout << endl;
}

void printArray1(int array[], int arrStart, int arrEnd) {
    for (int i = arrStart; i < arrEnd; ++i) {
        cout << array[i] << " ";
    }
    cout << endl;
}

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

//根据基准值进行分区,把比基准值小的元素放在它左边,大的元素放它右边
//返回值:基准值在排序后的位置
int partition(int array[],int arrStart,int arrEnd,int pivotPos){
    //避免数据的空洞,需要把基准值和数组的最后一个元素进行交换
    int pivotVaule=array[pivotPos]; //把基准值存出来
    array[pivotPos]=array[arrEnd-1];

    //遍历数组,找出数组中找出所有比基准值小的元素,并按找到的顺序从左到右放到数组
    int ItpivotVauleCount=0;//小于基准值的个数
    for(int i=arrStart;i<arrEnd-1;++i){
        if(array[i]<pivotVaule){
            int temp=array[arrStart+ItpivotVauleCount];
            array[arrStart+ItpivotVauleCount]=array[i];
            array[i]=temp;
            ++ItpivotVauleCount;
        }

        //把基准值放在数组里面,它的位置下标是ItpivotVauleCount
        array[arrEnd-1]=array[arrStart+ItpivotVauleCount];
        array[arrStart+ItpivotVauleCount]=pivotVaule;

        return arrStart+ItpivotVauleCount;
    }
}

//arrEnd是等于数组的长度,也是数组最后一个元素的下标+1
bool quickSort(int array[],int arrStart,int arrEnd){
    //终止条件
    if(arrEnd-arrStart<2){
        return 0;
    }

    //从数组中找一个基准值
    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 =0;

    printArray(array0, arrayLen);
    quickSort(array0, 0, arrayLen);
    printArray(array0, arrayLen);

    cout << "=========================================" << endl;

    int array1[] = {1};
    arrayLen = sizeof(array1)/sizeof(int);

    printArray(array1, arrayLen);
    quickSort(array1, 0, arrayLen);
    printArray(array1, arrayLen);

    cout << "=========================================" << endl;

    int array2[] = {2, 1};
    arrayLen = sizeof(array2)/sizeof(int);

    printArray(array2, arrayLen);
    quickSort(array2, 0, arrayLen);
    printArray(array2, arrayLen);

    cout << "=========================================" << endl;

    int array3[] = {1, 5, 3};
    arrayLen = sizeof(array3)/sizeof(int);

    printArray(array3, arrayLen);
    quickSort(array3, 0, arrayLen);
    printArray(array3, arrayLen);


    cout << "=========================================" << endl;

    int array4[] = {9, 12, 8, 7};
    arrayLen = sizeof(array4)/sizeof(int);

    printArray(array4, arrayLen);
    quickSort(array4, 0, arrayLen);
    printArray(array4, arrayLen);

    cout << "=========================================" << endl;

    int array5[] = {11,8,3,9,7,1,2,5};
    arrayLen = sizeof(array5)/sizeof(int);

    printArray(array5, arrayLen);
    quickSort(array5, 0, arrayLen);
    printArray(array5, arrayLen);


}