八大排序算法复杂度及C++实现

喜欢文章的话可以收藏或者关注一下…

冒泡排序(从小到大)

相邻两个值比较大小,按照排序规则摆放,重复之前操作,下面代码:

void BubbleSort(vector<int>& nums)
{
   
	for(int i=nums.size()-1;j>0;j--)
	{
   
		for(int j=0;j<i;j++)
		{
   
			if(nums[j]>nums[j+1])
			{
   
				swap(nums[j],nums[j+1]);//元素交换函数
			}
		}
	}
}

以上为最基础的冒泡排序,由于存在最优时间复杂度和最差时间复杂度,所以可以进行简单的优化。

优化方法:

创建一个flag=false;标识,当内层循环发生了一次交换数据就把flag=true;当其中一趟冒泡排序走完之后检查此flag是否为true,未发生修改则直接跳出循环避免空循环没操作。

应用场景:

选择排序(从小到大)

最易于理解的排序,每次选出数组中最值放在相应位置,下面代码:

void SelectSort(vector<int>& nums)
{
   
	int MinIndex=0;
	for(int j=1;j<nums.size()-1;j++)
	{
   
		MinIndex=j;
		for(int i=j;i<nums.size();i++)
		{
   
			if(nums[i]<nums[MinIndex])
			{
   
				MinIndex=i;
			}
		}
		if(j!=MinIndex)
		{
   
			swap(nums[j],nums[i]);
		}
	}
}

插入排序(从小到大)

将数组分为已排和待排序列,例如:0, 5,6,4,2,3 我们最开始认为0为已排序,然后从5开始向已排查询,寻找到合适位置插入。

void InsertSort(vector<int>& nums){
   
	for (int i = 1; i < nums.size(); i++){
   
		int j = i - 1;//未排序部分
		int tmp = nums[i];//待排数
		while (j>=0 && tmp<nums[j]){
   //不越界且大于待排数
			nums[j+1] = nums[j];//向后移
			j--;
		}
		nums[j+
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值