首页 > 试题广场 >

求采用以第一个元素为分界元素的快速排序法第一趟的扫描结果。

[问答题]

设有关键字序列34,23,33,45,12,37,48,67,11,28,要按照关键值递增的次序进行排序,求采用以第一个元素为分界元素的快速排序法第一趟的扫描结果。

第一趟结果:
//
// Created by John on 2021/02/20.
//快速排序
//
template<class T>
int getIndex(T* array,int low,int high){
    T data = array[low];//取第一个元素作为枢轴,对表进行划分
    while (low < high){
        while (low < high && array[high] >= data) --high;//不断移动下标直到找到一个比枢轴小的值
        array[low] = array[high];//把找到的值移动到左端
        while (low < high && array[low] <= data) ++low;//不断移动下标直到找到一个比枢轴大的值
        array[high] = array[low];//把找到的值移动到右端
    }
    array[low] = data;//枢轴值最终存放的位置
    return low;
}
template<class T>
T* quickSort(T* array,int low,int high){
    if (low < high){
        int index = getIndex(array,low,high);//以第一个元素为枢轴进行快排并且返回排序后枢轴元素的下标
        //依次对枢轴元素左右的子表进行递归快排
        quickSort(array,low,index-1);
        quickSort(array,index+1,high);
    }
    return array;
}


上面这个是完整代码,执行完整代码的打印结果是升序

编辑于 2021-02-22 13:09:05 回复(0)
编辑于 2020-05-08 16:41:30 回复(0)
11 23 33 28 12 34 48 67 37 45
发表于 2017-02-22 02:41:49 回复(0)