交换排序(冒泡排序/快速排序)及其优化

本文介绍了交换排序的基本思想,并详细解析了冒泡排序和快速排序的实现过程。冒泡排序在最好和最坏情况下的时间复杂度分别为O(n)和O(n²),它是稳定的排序算法。快速排序是对冒泡排序的改进,通过选择基准值进行分区,递归地排序左右子区间,最终实现整体排序。同时,文章提到了快速排序的非递归实现方式,通过栈来替代递归过程。
摘要由CSDN通过智能技术生成

交换排序基本思想

两两比较待排记录的关键字,一旦发现两个记录的次序与排序的要求相逆,则交换这两个记录的位置,直到表中没有逆序的记录存在为止。

分类

  • 冒泡排序
  • 快速排序(对冒泡的改进)

<1>冒泡排序

基本思想:序列中相邻的两个元素进行比较,如果前一个元素大于后一个元素,则交换二者位置,接着继续向后循环比较直到最后一个元素,这样一趟下来就可以将最大的那个元素放到最后的位置。完成之后,进行第二趟排序,循环比较直到倒数第二个元素,就可以将第二大元素放于倒数第二个位置......循环以上步骤,直到循环比较到原数组的最后两个元素,排序即可完成。

代码体现:

void bubble_sort(int arr[],int len)
{
	for(int i=0;i<len-1;i++)   //排序的趟数,n个数就需要排序n-1趟
	{
		bool flag=true;   //一个小小的优化,在某一趟如果没有改变就不再进行最外层循环了
		for(int j=0;j<len-i-1;j++)  //每一趟中的交换排序
		{
			if(arr[j]>arr[j+1])
			{
				swap(arr[j],arr[j+1]);
				flag=false;    //进入这个判断就证明排序没有完成
			}
		}
		if(flag)
			break;

	}
}

复杂度分析&#x

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值