首页 > 其他分享 >26.冒泡排序

26.冒泡排序

时间:2023-06-25 22:00:28浏览次数:39  
标签:26 int 158 冒泡排序 159 161 171 163

每当皇帝选妃时,首席太监小桂子总是忍不住在旁边偷窥这些候选的美女,有一次他发现做为伴读小书童的你居然犯了个常人都可以轻易看出的错误,有几位候选的美女站成如下一排:

当我们采用前面的选择排序时,我们仍然要将候选者遍历5遍,才能完成最终的排序,但其实,本身这些美女除了第一个外,已经很有序了,我们只需要把第一个和第二个交换,然后又和第三个交换,如此循环,直到和最后一个交换后,整个数组基本就有序了!

当然,并不是每次都这么幸运,像下面的情况就会更复杂一些,一趟并不能完全解决问题,我们需要多趟才能解决问题.

经过上述五步后,得到的结果:

此时,我们只保障了最后一个数是最大的,并不能保障前面的数一定会有序,所以,我们继续按照上面五步对剩下的5个数继续进行一次排序,数组就变得有序了。

以上过程就是冒泡排序: 通过重复地遍历未排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢得像泡泡一样“浮”到数列的顶端,故而得名!

代码实现:

#include <stdio.h>
#include <stdlib.h>

void swap(int* num1, int* num2)//交换两个指针保存的值
{
	int temp = *num1;
	*num1 = *num2;
	*num2 = temp;
}

void BubbleSort(int arr[], int len)//冒泡排序
{
	for (int i = 0; i < len - 1; i++)
	{
		bool sorted = true;

		for (int j = 0; j < len - 1 - i; j++)
		{
			if (arr[j] > arr[j + 1])
				swap(&arr[j], &arr[j + 1]);
			sorted = false;
		}

		if (sorted) break;//没有发生交换,顺序正确,退出
	}
}

int main()
{
	int beauties[] = { 163, 161, 158, 165, 171, 170, 163, 159, 162 };
	//第一趟161 158 163 165 170 163 159 162 -- 171
	//第二趟158 161 163 165 163 159 162 -- 170 171
	//第三趟158 161 163 163 159 162 -- 165 170 171
	//第四趟158 161 163 159 162 -- 163 165 170 171   稳定的排序算法
	//第五趟158 161 159 162 -- 163 163 165 170 171
	//第六趟158 159 161 -- 162 163 163 165 170 171
	//第七趟158 159 161 待排序的数据没有产生交换,排序结束
	int len = sizeof(beauties) / sizeof(beauties[0]);

	BubbleSort(beauties, len);

	printf("美女排序以后的结果是:\n");
	for (int i = 0; i < len; i++)
	{
		printf("%d ", beauties[i]);
	}


	system("pause");
	return 0;
}

参考资料来源:

奇牛学院

标签:26,int,158,冒泡排序,159,161,171,163
From: https://www.cnblogs.com/codemagiciant/p/17504061.html

相关文章

  • 其他——26电梯导航栏
    思路:主要思路就是对滑动事件进行监听。监听到当前滑动到的位置,然后判断当前所在的位置处于哪一块区域。给它addactive的类,当滑走当前区域,就会removeactive类。监听点击事件,其实跟css里的scroll-behavior差不多。点击导航,然后获取点击的href,然后获取要显示的区域的位置,然后......
  • 78264用于粘贴
    Pleaserankthefollowingelementsinorderofimportanceforyourbusinesswhenconsideringacross-borderpaymentplatform.Pleaseprioritizethemfromhighesttolowest:1.Pricing(rateandexchangerate):Theplatform'sfeestructureandexchang......
  • 【雕爷学编程】Arduino动手做(126)---GP2Y0A02YK0F红外测距模块
    37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来—小小的进步或是搞......
  • P8026 [ONTAK2015] Bajtocja 做题笔记
    题目链接一道好题,本来是做几道启发式合并玩玩,没想到是个哈希。这一道题需要维护连通性,显然想到使用并查集。如果两个点在某个图内的父亲相同,显然这两个点就连通了。但是如果每链接一对点我们就遍历所有点对然后判断父亲,显然爆炸。于是考虑借鉴一下CSP2022T3的思路,对于每......
  • P8026 『JROI-7』hibernal 做题笔记
    题目链接观察数据,要求询问次数不超过$\lceil2\logn\rceil-1$,相当困难。我刚开始也在想二分,但这个东西并不具有单调性,但这个题具有的特点就是你不仅仅可以询问一个前缀,你还可以询问任意的集合。首先发现如果能将$n$个苹果分成$S_1$$S_2$两个长度接近的集合,且$S_1$和$S......
  • vue学习第26天 xxxx响应式页面制作
    项目地址:后续添加 1、布局分析nav2列、article7列、aside3列 2、屏幕划分分析 移动端布局总结1、移动端主流方案 2、移动端技术选型1)流式布局(百分比布局)2)flex布局(推荐)3)rem适配布局(推荐)4)响应式布局建议:我们......
  • Python 算法之冒泡排序
    Python算法之冒泡排序冒泡排序冒泡排序算法的原理如下:(从后往前)1、比较相邻的元素。如果第一个比第二个大,就交换他们两个。2、对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。3、针对所有的元素重复以上的步骤,除了最后一......
  • 20230430 26. 享元模式 - 网站复用
    介绍享元模式(Flyweight),运用共享技术有效地支持大量细粒度的对象。在享元对象内部并且不会随环境改变而改变的共享部分,可以称为是享元对象的内部状态,而随环境改变而改变的、不可以共享的状态就是外部状态了。事实上,享元模式可以避免大量非常相似类的开销。在程序设计中,有时需......
  • 冒泡排序 最大的在最后面
    publicclassMaoPao{publicstaticvoidmain(String[]args){//冒泡排序最大的放在最后面//定义一个数组int[]arr={11,99,0,3,5,6,5,3,5,8,1};//前一个数和后一个数比较如果后一个数大放在后面//第一位3和第二位5比较......
  • 洛谷 P8264 [Ynoi Easy Round 2020] TEST_100
    题目Link我们不妨来考虑所有询问都是\(l=1,r=n\)的情形,这种情况下需要对每个值处理出他经过一系列变换后变成了什么数。考虑用\(\text{solve}(p,l,r)\)表示我们现在要计算\(x\in[l,r]\)的这些数在经过\(x\leftarrow|x-a_p|,x\leftarrow|x-a_{p+1}|\),一直到\(x\leftar......