STL:快速排序和三数取中

博客介绍了手写快速排序,提到STL的sort会自动选择heap sort或Intro quick sort。为避免元素输入不随机,STL采用多种方式改变快排中temp的选取,如Median -of -Three方法。还介绍了STL中equal_range思想,其有序查找基于二分查找。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

自己写一个快速排序,原理网上也很多。STL  的sort比较好用,会自动判断使用heap sort或者Intro quick sort(类似三数取中法快排)。

	int quickSortPart(int a[],int left,int right)
	{

		int temp = a[right];
		while (left<right)
		{
			while (left<right&&a[left]<temp )
			{
				left++;
			}
			a[right] = a[left];
			while (left < right&&a[right] >=temp)
			{
				right--;
			}
			a[left] = a[right];
		}
		a[right] = temp;
		return right;
	}
	void quickSort(int a[], int left, int right)
	{
		if (left<right)
		{
			int mid = quickSortPart(a, left, right);
			quickSort(a, left, mid - 1);
			quickSort(a, mid + 1, right);
		}

	}

STL为了避免元素输入时不够随机,采用多种方式改变int quickSortPart(int a[],int left,int right)中temp的选取,

 

Median -of -Three

思路和代码都简单,在我们的quickSortPart前添加逻辑判断,找到first,mid,last中第二大的数和最后一个数交换,然后在执行我们的quicSortPart。

equal_range思想

STL中的有序查找,实现原理依然是二分查找。思路和代码如下

	int BinFind(int a[], int size,int key)//升序2分查找
	{
		int left = 0;
		int right =size - 1;

		while (left <= right)
		{
			int mid = (left + right) >> 1;
			if (a[mid] < key)
				left = mid + 1;
			if (a[mid] > key)
				right = mid - 1;
			if (a[mid] == key)
				return mid;
		}
		return -1;
	}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值