c++代码
int partition(int arr[], int low, int high)
{
int pivot = arr[high];//设置基准值 基准值是本次分区筛选条件
int i = low - 1;//原始数组基础索引 会根据基准值来调整原始数据
for (int j = low; j < high; ++j)//遍历当前排序区间 依次与基准值比较
{
if (arr[j] <= pivot)//若当前值小于基准值
{
++i;//更新原始索引
swap(arr[i], arr[j]);//交换原始数据和当前所遍历到的数据
}
}
swap(arr[i + 1], arr[high]);//再次交换 本次交换之后已保证区间[0,i]的所有值都小于基准值,区间[i+1,high]都大于等于基准值
return i + 1;
}
void quickSort(int arr[],int low,int high)
{
if (low < high)
{
int pi = partition(arr, low, high);//区间划分
quickSort(arr, low, pi - 1);//递归左区间
quickSort(arr, pi + 1, high);//递归右区间
}
}
时间复杂度:O(nlogn)
空间复杂度:O(logn)
不稳定排序