博客对您有所帮助的话,欢迎给个赞啦,你的鼓励是对我最大的支持! 有不足之处也请您评论指教
冒泡排序
下面我们介绍冒泡排序算法的原理及其C语言代码和Python代码实现,
1.1 算法思想
思想: 从前往后(或从后往前)两两比较相邻元素的大小,按照元素的大小( 若 A i > A i − 1 若A_{i}>A_{i-1} 若Ai>Ai−1)进行交换,直到元素全部比较完。
1.2 实例介绍
下面将某个实例和图片来介绍冒泡排序的思想和代码;
假设数组
a r r = [ 5 , 2 , 4 , 6 , 1 , 3 ] arr=[5,2,4,6,1,3] arr=[5,2,4,6,1,3]
注:本文依据从前往后冒泡的思想进行实例及代码编写。
下方介绍的图片显示颜色为黄就是已经排好的元素,显示为蓝色就是还未排好的元素,显示为绿色就是正在排序的元素
1.第一轮,
如图1所示,
①从2与5比较开始 ,5>2 ,5与2交换位置,数组元素依次为 2 5 4 6 1 3;
②在 5与4比较,5>4,5与4交换位置,数组元素依次为 2 4 5 6 1 3;
③在 5与6比较 ,5<6,不交换位置,数组元素依次为 2 4 5 6 1 3;
④在6与1比较,6>1,6与1交换位置,数组元素依次为 2 4 5 1 6 3;
⑤在6与3比较,6>3,6与3交换位置,数组元素依次为 2 4 5 1 3 6;
元素6冒泡完成,为最大元素.
图
1
第
1
轮
排
序
图1~第1轮排序
图1 第1轮排序
2. 第二轮
如图2所示,
①从2与4比较开始 ,2<4,不交换位置,数组元素依次为 2 4 5 1 3 6 ;
②在 4与5比较,4<5,不交换位置,数组元素依次为 2 4 5 1 3 6 ;
③在 5与1比较 ,5>1,5与1交换位置,数组元素依次为 2 4 1 5 3 6;
④在5与3比较,5>3,5与3交换位置,数组元素依次为 2 4 1 3 5 6;
元素5冒泡完成.
图
2
第
2
轮
排
序
图2~第2轮排序
图2 第2轮排序
3.第3轮
如图3所示,
①从2与4比较开始 ,2<4,不交换位置,数组元素依次为 2 4 1 3 5 6;
②在 4与1比较,4>1,4与1交换位置,数组元素依次为 2 1 4 3 5 6 ;
③在 4与3比较 ,4>3,4与3交换位置,数组元素依次为2 1 3 4 5 6;
元素4冒泡完成.
图
3
第
3
轮
排
序
图3~第3轮排序
图3 第3轮排序
4.第4轮
如图4所示,
①从2与1比较开始 ,2>1,2与1交换位置,数组元素依次为 1 2 3 4 5 6;
②在2与3比较 ,2<3,不交换位置,数组元素依次为1 2 3 4 5 6;
元素3冒泡完成.
图 4 第 4 轮 排 序 图4~第4轮排序 图4 第4轮排序
5.第5轮
如图5所示,
①从1与2比较开始 ,1<2,不交换位置,数组元素依次为1 2 3 4 5 6;
元素2冒泡完成.
图
5
第
5
轮
排
序
图5~第5轮排序
图5 第5轮排序
冒泡完成。
1.3 效率、稳定性和适用性
1.时间效率:
最好情况:
最坏情况:
2.空间效率:
O
(
1
)
O(1)
O(1);
3.稳定性:稳定
1.4 代码实现
1.4.1 C语言代码
#include<stdio.h>
int main()
{
void Bubble_sort(int arr[], int len);
int arr[6]={5,2,4,6,1,3};
int k; // 循环输出
int len=sizeof(arr)/sizeof(int); // 元素个数
Bubble_sort(arr,len);
// 输出最终排序结果
printf("最后结果 ");
for(k=0;k<len;k++)
{
printf("%d ",arr[k]);
}
printf("\n");
return 0;
}
void Bubble_sort(int arr[], int len)
{
int *p=arr;
int i,j,temp,k;
for(i=0;i<len-1;i++) // 分析冒泡排序可知 n个元素 n-1轮
{
for(j=0;j<len-i-1;j++) // 从前往后两两相邻元素依次对比
{
if(*(p+j)>*(p+j+1)) // 满足条件 Ai>Ai-1 则交换
{
temp=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=temp;
}
}
printf("第%d轮", i+1); // 输出每一轮冒泡排序后的结果
for(k=0;k<len;k++)
{
printf("%d ",*(p+k));
}
printf("\n");
}
}
运行结果:
图
6
C
语
言
代
码
执
行
结
果
图6~C语言代码执行结果
图6 C语言代码执行结果
1.4.2 Python代码
def Bullbesort(List, len):
for i in range(0, len-1):
for j in range(0, len-i-1):
if(List[j]>List[j+1]):
temp=List[j+1]
List[j+1]=List[j]
List[j]=temp
return List
List = [5, 2, 4, 6, 1, 3]
print("冒泡排序后的结果:")
print(Bullbesort(List, len(List)))
运行结果
图
7
P
y
t
h
o
n
语
言
代
码
执
行
结
果
图7~Python语言代码执行结果
图7 Python语言代码执行结果
1.5 参考文献
[1]王道论坛. 2022年数据结构考研复习指导[M]. 北京:电子工业出版社, 2021.
写在最后面的话,此博客为个人通过书本和互联网作为学习资源自己整理而成的笔记,仅作为知识记录及后期复习所用,如有错误,还望评论指教 ——t4ngw.