【精华】排序算法汇总——冒泡排序和快速排序

本文详细介绍了两种经典的排序算法——冒泡排序和快速排序。冒泡排序通过反复比较相邻元素并交换位置来实现排序;而快速排序则采用分治策略,通过选择枢轴将数组分成两部分,每部分再递归地应用快速排序。文章提供了核心代码示例,并解释了两种算法的工作原理。

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

日常说明:有错误欢迎大家指正。另外本博客所有的代码博主编写后均调试通过。重要提醒!!!!博主使用的是VS2017,如果有低版本的小伙伴最好新建空项目将此代码复制上去。
更多算法请关注我的算法专栏https://blog.youkuaiyun.com/column/details/20417.html
有朋友反映让我多加备注,我觉得除非特别惊艳的方法需要说明外,这些基本的方法是容易明白的,当然前提是先搞懂算法的基本思想,希望对你们有用。

一、冒泡排序
算法思想:冒泡排序也成为起泡排序(Bubble Sort),过程很简单。用冒泡排序的方法将一个数字序列的步骤:第一个关键字与第二个关键字比较大小,如果第一个关键词大于第二个,那么交换两者的位置。较大的关键字继续和之后的关键字比较,依次类推,一趟一趟的进行,直到将序列按非递减排序为止。其实就是每一趟将最大的关键词找出来,类似于水中的气泡向上漂浮。
如 :
49 38 65 97 76 13 27
第一趟后:38 49 65 76 13 27 97(最大的为97)
第二趟后:38 49 65 13 27 76(最大76)
第三趟后:38 49 13 27 65(最大65)
第四趟:38 13 27 49 (最大49)
第五趟:12 27 38
至此排序完成:12 27 38 49 65 76 97
冒泡排序的时间复杂度O(n^2)
核心代码:

for(i=0;i<L.length-1;i++)
{
	if(L[i]<L[i+1])
	{
		swap(L[i],L[i+1]);    //简单的交换函数
	}
}

二、快速排序
算法思想:快速排序是对冒泡排序的一种简单改进,效率却大大提高。具体的做法是:
首先确定一个枢轴值,一般是选择序列的第一个关键字。分别从两端将关键词和枢轴值进行比较,比枢轴值小的放在枢轴值左侧,比枢轴值大的放在枢轴值右侧。这样一趟下来就将序列分为两个子序列,再分别对两个子序列进行同样的划分,直至排序完成。
如:
49 38 65 97 76 13 27
第一次划分:27 38 13 49 76 65 97
两个子序列分别进行快速排序:
13 27 38(子序列一趟排序完成)
65 76 97 (排序一趟完成)
即:13 27 38 49 65 76 97
核心代码:

int partition(Sqlist&L,int low,int high)
{
	L[0] = L[low];//L[0]用来存储枢轴值,即将第一个关键字L[low]赋值给L[0]
	key = L[low];//枢轴关键字
	while(low<high)
	{
		while(low<high&&L[high]>=key)
		{--high};
		L[low] = L[high];
		while(low<high&&L[low]<=key)
		{++low};
		L[high]=L[low];
	}
	L[low]=L[high];
	return low;
}


int Qsort(Sqlist&L,int low,int high)
{
	if(low<high)
	{
		temp = partition(L,low,high);
		Qsort(L,low,temp-1);
		Qsort(L,temp+1,high);
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值