【排序算法】——— 快速排序总结

【1】基本思想

快速排序算法的基本思想通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列

可能从字面感觉不到他的好处,我们通过例子来学习他的精妙之处;
例如:假设我们要对数组{50,10,90,30,70,40,80,60,20}进行排序
我们先来看代码:

【2】快速排序法的普通版本

int Partition(vector<int>&vec, int low, int high)
{
   
	int pivotkey;
	pivotkey = vec[low];	//设立枢纽值为数组的起始位置
	while (low < high)	//只要high大于low即low和high的位置还没有重合或交换
	{
   
		//如果高位的数大于枢纽值则不做改变,高位下标往下减
		//否则小于的话将枢纽值和高位的小的数做交换
		while (low<high&&vec[high]>pivotkey)	
		{
   
			high--;
		}
		swap(pivotkey, vec[high]);
		//同理,如果低位的数小于枢纽值则不做改变,低位下标往上加
		//否则大于的话讲枢纽值和低位的大的数交换
		while (low < high&&vec[low] < pivotkey)	
		{
   
			low++;
		}
		swap(pivotkey, vec[low]);

		//一直到某个时刻低位不小于高位,则说明已经交换完了
		//枢纽值的左边全部小于枢纽值,枢纽值的右边全部大于枢纽值
	}
	return low;	//返回此时枢纽值的位置下标
}

void QuickSort(vector<int>&vec,int low,int high)
{
   
	int pivot;	//枢纽位置
	if (low < high)
	{
   
		pivot = Partition(vec, low, high);	//找到枢纽位置
		QuickSort(vec, low, pivot - 1);		//递归小于枢纽值的部分
		
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值