学习记录——快速排序

//快速排序基本步骤:
//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站搜索“快速排序”。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值