交换排序——冒泡排序

news/2024/11/16 9:45:20/

交换排序——冒泡排序

7.6 交换排序——冒泡排序

交换排序基本思想:所谓交换,就是根据序列中两个记录键值的比较结果来对换这两个记录在序列中的位置,交换排序的特点是:将键值较大的记录向序列的尾部移动,键值较小的记录向序列的前部移动。

冒泡排序概念

冒泡排序便是交换排序的一种。

冒泡排序的思想(忘了从哪本书摘抄的了,凑合着看吧)
请添加图片描述

例如有6个元素需要排序:
6 5 3 4 1 2
第1轮:

[5 6] 3 4 1 2
5 [3 6] 4 1 2
5 3 [4 6] 1 2
5 3 4 [1 6] 2
5 3 4 1 [2 6]//第1轮结束,数组中最大值固定

第2轮:

[3 5] 4 1 2 6
3 [4 5] 1 2 6
3 4 [1 5] 2 6
3 4 1 [2 5] 6//第2轮结束,数组中第二大的值固定

第3轮:

[3 4] 1 2 5 6
3 [1 4] 2 5 6
3 1 [2 4] 5 6//第3轮结束,数组中第三大的值固定

第4轮:

[1 3] 2 4 5 6
1 [2 3] 4 5 6//第4轮结束,排序完成

动图加深理解。
请添加图片描述

参考程序

任何初学编程语言的人,只要会玩数组和循环,冒泡排序都会玩。

不经思考的无脑写法:

void Swap(Datatype* a,Datatype* b){Datatype t=*a;*a=*b;*b=t;
}void bubbleSort(Datatype* a,int n){int i=0,j=0;for(i=0;i<n;i++)for(j=0;j<n-1;j++)if(a[j]>a[j+1])Swap(&a[j],&a[j+1]);
}

尝试优化:每轮冒泡都会选出一个最值放在后面,所以我们可以进行适当剪枝,除去多余的循环。以及冒泡排序可能还没进行完数据就已经有序,所以需要另外做判断。

void bubble(Datatype* a,int n){int i=0,j=0;for(i=1;i<n;i++){//表示这是第i轮排序int judg=0;for(j=1;j<n-i;j++)//表示正在比较的数据if(a[j-1]>a[j]){Swap(&a[j-1],&a[j]);judg=1;}if(judg==0) break;}
}

冒泡排序的特性总结

  1. 冒泡排序是一种非常容易理解的排序。也是我目前了解的算法>排序算法里耗时最长的算法>排序算法。若在面试时面试官问冒泡排序,则面试官很大可能对你失去了兴趣,随便问点东西打发面试时间满足公司和其他机构的要求。
    冒泡排序并不是没有意义,它用来教学就有意义。也就是当做其他算法>排序算法的反面教材。

  2. 时间复杂度: O ( N 2 ) O(N^2) O(N2)

  3. 空间复杂度: O ( 1 ) O(1) O(1)

  4. 稳定性:稳定

因为冒泡排序进行两两比较的方式,除非修改真值判断方式,否则相同的两个数据不会发生交换。


http://www.ppmy.cn/news/1547420.html

相关文章

一键生成本地SSL证书:打造HTTPS安全环境

一键生成本地SSL证书&#xff1a;打造HTTPS安全环境 日光下的寒林没有一丝杂质&#xff0c;空气里的冰冷仿佛来自故乡遥远的北国&#xff0c;带着一些相思&#xff0c;还有细微几至不可辨认的骆驼的铃声。–《心美&#xff0c;一切皆美》 在本地开发环境中启用 HTTPS 一直是许多…

Day 65 || SPFA、判断负权回路、bellman_ford之单源有限最短路

Bellman_ford 队列优化算法&#xff08;又名SPFA&#xff09; 题目链接&#xff1a;卡码网&#xff1a;94. 城市间货物运输 I 思路&#xff1a;具体参考“代码随想录——Bellman_ford 队列优化算法&#xff08;又名SPFA&#xff09;”&#xff0c;主要的思想是在Bellman_ford…

自定义实体类中DateTime属性的序列化格式

目录 一、Newtonsoft.Json下自定义DateTime序列化格式器 1. 定义DateFormatConverter 2. 在实体上使用自定义的DateFormatConverter特性 二、System.Text.Json下自定义DateTime的序列化格式器 1. 定义DateTimeConverter 2. 定义DateTimeJsonConverter特性 3. 在实体上使…

谷歌Gemini发布iOS版App,live语音聊天免费用!

大家好&#xff0c;我是木易&#xff0c;一个持续关注AI领域的互联网技术产品经理&#xff0c;国内Top2本科&#xff0c;美国Top10 CS研究生&#xff0c;MBA。我坚信AI是普通人变强的“外挂”&#xff0c;专注于分享AI全维度知识&#xff0c;包括但不限于AI科普&#xff0c;AI工…

数据结构Python版

2.3.3 双链表 双链表和链表一样&#xff0c;只不过每个节点有两个链接——一个指向后一个节点&#xff0c;一个指向前一个节点。此外&#xff0c;除了第一个节点&#xff0c;双链表还需要记录最后一个节点。 每个结点为DLinkNode类对象&#xff0c;包括存储元素的列表data、…

Vue3中一级导航栏的吸顶导航交互以及Pinia优化重复请求

一、前言 在日常的网站中&#xff0c;当鼠标滚轮往页面的底部滑动时&#xff0c;会出现顶部导航栏的隐藏&#xff0c;而出现新的导航栏显示&#xff0c;这就是一级导航栏的吸顶导航交互。本文当实现改模块功能的实现。 二、示例图 参考黑马程序员小兔仙儿PC端项目&#xff1a;…

CSS回顾-颜色单位详解

一、引言 在网页设计中&#xff0c;颜色至关重要。CSS 丰富的颜色单位如同调色盘&#xff0c;开发者用它为网页元素上色。从易记的颜色名称、精确的十六进制值&#xff0c;到光学原理相关的 RGB、HSL 模型&#xff0c;各颜色单位都有独特用途。理解和运用这些单位是打造吸引人…

自动化爬虫Selenium

自动化爬虫Selenium 这篇文章, 我们将要学习自动化爬虫的知识啦。 目录 1.Selenium的基本操作 2.用Selenuim获取数据 3.当当网数据获取 4.实战 一、Selenium的基本操作 首先, 我们在使用Selenium之前, 需要做两件事情。第一件事情, 就是安装第三方库, 第二件事情, 就是…