基础数据结构-排序

本文详细介绍了三种经典排序算法:快速排序、堆排序和归并排序。快速排序在平均情况下的时间复杂度为O(nlog2n),通过分治策略实现高效排序;堆排序利用堆数据结构保证排序稳定性;归并排序则以稳定的O(nlog2n)时间复杂度完成排序。通过对这些算法的深入理解,可以提升编程能力。

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

快排

基于分治法的交换排序

特征

  1. 每次排序之后对于第k位置来说,位于[0,k-1]的数都小于它,位于[k+1,n-1]的数都大于它
  2. 最好情况下,递归深度形成一颗完全二叉树的空间复杂的O(log2n),最坏情况下形成只有左子树或者只有右子树,复杂度O(n),递归的平均复杂度O(log2n),快排是交换排序,交换的复杂度O(n),所以快排的平均复杂度O(nlog2n)

步骤

1.建立交换函数swap()

    将待排序列的第一位元素设置成哨兵pos,设置两个寻找标记指针,第一个标记从后往前找,
    寻找比哨兵小的元素,找到之后与哨兵交换位置,第二个标记再从前往后找比哨兵大的元素,
    找到之后与哨兵交换位置。直到两个指针交会即可停止,并返回该位置。

2.建立分治函数quickSort()

将swap函数返回的位置作为中间值mid,对[left,mid-1],[mid+1,right]区间继续进行分治,
直到left和right相等为为止。

模板

int swap(vector<int> &v,int l,int r)
{
	int pos = v[l];
	while (l<r)
	{
		while (l < r&&v[r] >= pos) r--;
		v[l] = v[r];
		while (l < r&&v[l] <= pos) l++;
		v[r] = v[l];
	}
	v[l] = pos;
	return l;
}
void quickSort(vector<int> &v, int l,int r)
{
	if (l >= r) return;
	int mid = swap(v,l,r);
	quickSort(v, l, mid - 1);
	quickSort(v, mid + 1, r);
}

堆排序

归并排序

桶排序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值