//快速排序基本步骤:
//1、把最左边元素定为中心轴,最左边下标定为left,最右边下标定为right
//2、把比中心轴小的放到左边,大的放到右边,left++、right--,直到相等然后用中心轴赋值
//3、再对中心两边子列分别递归重复以上步骤
void quicksort(int array[], int begin ,int end)//begin和end是针对数组下标的排序起点和终点
{
int piovt = array[begin];//初始化第一个元素为中心轴
int left = begin;//初始化left为最左边下标
int right = end ;//初始化right为最右边下标
bool moveright = true;//如果true判断right,否则判断left,且第一次判断right
while (left != right)//left和right相等时结束
{
while (moveright == true && left != right)//判断right
{
if (array[right] < piovt)//right小于中心轴
{
array[left] = array[right];//把right的值放到左边
left++;//left右移
moveright = false;//再判断left
}
else//right大于等于中心轴
{
right--;//数组不动,right左移,继续判断right
}
}
while(moveright == false && left != right)//判断left
{
if (array[left] > piovt)//left大于中心轴
{
array[right] = array[left];//把left的值放到右边
right--;//right左移
moveright = true;//再判断right
}
else//left小于等于中心轴
{
left++; // 数组不动,left右移,继续判断left
}
}
}
array[left] = piovt;//left=right,赋给中心轴,此时左边子序列比中心轴小,右边比中心轴大
if (abs(left-begin) > 1)//中心轴左边元素个数小于等于1则已排序完毕,否则继续对子序列排序
{
quicksort(array, begin, left-1);//子序列传入下标
}
if (abs(end-right) > 1)//中心轴右边元素个数小于等于1则已排序完毕,否则继续对子序列排序
{
quicksort(array, right+1,end);//子序列传入下标
}
}
详细思路、算法体现去B站搜索“快速排序”。