【排序算法】冒泡排序及其C语言实现_Python实现

博客对您有所帮助的话,欢迎给个赞啦,你的鼓励是对我最大的支持! 有不足之处也请您评论指教


冒泡排序

下面我们介绍冒泡排序算法的原理及其C语言代码和Python代码实现,

1.1 算法思想

思想: 从前往后(或从后往前)两两比较相邻元素的大小,按照元素的大小( 若 A i > A i − 1 若A_{i}>A_{i-1} Ai>Ai1)进行交换,直到元素全部比较完。

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.

  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值