数据结构与算法之快速排序

8 篇文章 0 订阅
6 篇文章 0 订阅

这次我要分享的是算法中的另一种排序:快速排序
快速排序可以说是排序当中大部分情况下效率最高的排序算法。
是一种基于数据交换的排序。
时间复杂度为O(nlog2n) , 是一种不稳定的排序算法。

快速排序(Quicksort)是对冒泡排序的一种改进。
快速排序由C. A. R. Hoare在1960年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

如下代码便是本人写的快排代码

void _quick_sort(int* arr,size_t left,size_t right)
{
	if(left >= right) return;
	//计算标杆的下标
	int pi = (left+right)/2;
	//备份标杆的值
	int pv = arr[pi];
	//备份左右下标
	int l=left, r=right;

	//左右下标相遇时结束
	while(l < r)
	{
		//在标杆的左边寻找比它大的数
		while(l<pi && arr[l] <= pv) l++;
		if(l<pi)  //如果没有超出范围,说明找到比标杆大的值
		{
			//与标杆交换位置,并记录标杆的位置
			arr[pi] = arr[l];
			pi = l;
		}
		//在标杆的右边寻找比它小的数
		while(pi<r && arr[r] >= pv) r--;
		if(pi<r) //如果没有超出范围,说明找到比标杆小的值
		{
			arr[pi] = arr[r];
			pi = r;
		}
	}
	//还原标杆的值
	arr[pi] = pv;
	//进入递归
	if(pi-left > 1) _quick_sort(arr,left,pi-1);  
	if(right-pi > 1) _quick_sort(arr,pi+1,right);
}

void quick_sort(int* arr,size_t len)
{
	_quick_sort(arr,0,len-1);
}

冒泡排序:https://blog.csdn.net/weixin_43505112/article/details/97297043
归并排序:https://blog.csdn.net/weixin_43505112/article/details/97299733
插入排序:https://blog.csdn.net/weixin_43505112/article/details/97514627
堆排序:https://blog.csdn.net/weixin_43505112/article/details/97516883
选择排序:https://blog.csdn.net/weixin_43505112/article/details/97515978

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值