七大排序算法总结

本文总结了七大经典排序算法,包括插入排序、冒泡排序、选择排序、希尔排序、堆排序、快速排序和归并排序。分别探讨了它们的思路、性能以及适用场景,特别指出在不同数据规模下选择合适的排序算法的重要性。
摘要由CSDN通过智能技术生成
排序算法分类
类型 排序名称 排序名称
插入排序类型 直接插入排序 希尔排序
选择排序类型 选择排序 堆排序
交换排序类型 冒泡排序 快速排序
归并排序类型 归并排序
性能—时间复杂度&空间复杂度

下一篇博客中将10, 1000, 10000个数据用什么排序算法比较合理

排序方法 平均时间复杂度 最好情况 最差情况 辅助空间 稳定性
插入排序 O(n^2) O(n) O(n^2) O(1) 稳定
冒泡排序 O(n^2) O(n) O(n^2) O(1) 稳定
选择排序 O(n^2) O(n^2) O(n^2) O(1) 稳定
希尔排序 O(n^ 1.3)~O(n^2) O(n) O(n^2) O(1) 不稳定
堆排序 O(nlogn) O(nlogn) O(nlogn) O(1) 不稳定
快速排序 O(nlogn) O(nlogn) O(n^2) O(logn) 不稳定
归并排序 O(nlogn) O(nlogn) o(nlogn) O(n) 稳定
插入排序
思路

将前i个排好顺序的情况下,添加第i+1个数,再将前i+1个数排好顺序。直到排到i == n。
代码实现

void InsertSort(vector<int>& v, int len)
{
   
	for (int i = 0; i < len; i++)
	{
   
		for (int j = i; j > 0; j--)
		{
   
			if (v[j] < v[j - 1])
				swap(v[j], v[j - 1]);
		}
	}
}

特点:元素越接近有序,直接插入排序的算法时间效率越高

冒泡排序
思路

进行第i趟排序时,从0位置开始,选中相邻的两个元素,如果该两个元素不满足顺序要求,则将这两个元素的进行交换,标记后者元素位置,直到标记到n-1位置,一趟排序完成。
代码实现

void BubbleSort(vector<int>& v, int len)
{
   
	for (int i = 0; i < len; i++)
	{
   
		for (int j = 1; j < len - i; j++)
		{
   
			if (v[j] < v[j - 1])
				swap(v[j], v[j - 1]);
		}
	}
}

特点:适合数据不多的情况下,进行排序

选择排序
思路

第i趟设置一个标记位,标志最小值&最大值,将一趟标记最小值的位置放在一端,标记最大值的位置放在另一端,完成一趟排序。(最大值标记可以省去)
代码实现

void SelectSort(vector<int>
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值