设有关键字序列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;
}
上面这个是完整代码,执行完整代码的打印结果是升序