冒泡排序算法

一、什么是冒泡排序

        冒泡排序是一种(排序算法)交换排序,它的思路就是在输入数据中,通过比较相邻的两元素,看是否满足顺序的要求,若满足则保持不动,若不满足则让它们互换。然后继续与下一个相邻元素的比较,一直到一次遍历完成。一次遍历的过程就被成为一次冒泡,一次冒泡的结束至少会让一个元素移动到了正确的位置。所以要想让所有元素都排序好,一次冒泡还不行,我们需要重复N-1次去冒泡,这样最终就完成了N个数据的排序过程。
        通过上面的描述,可以看出来冒泡排序在代码实现层面需要双层循环,哈哈哈。

二、算法流程

        利用双层循环实现,外面循环变量为i,里面虚幻变量为j。假如有n个数需要进行排序,则外循环重复n-1次,内循环依次重复n-1,n-2,…,2,1次。
        假设数组长度为N。
        1.比较相邻两个元素的大小,如果前面数据值大于后面数据值,将二者进行交换。
        2.这样对数组的第0个数据(索引位置)到N-1个数据(索引位置)进行一次遍历后,最大的一个数据就变到数组第N-1个位置(索引位置)。
        3.由于每次通过冒泡产生最大的元素并沉到末尾,因此在第二轮冒泡时循环次数减1,依次类推。

三、Java代码实现

        由于Java不能够直接交换两个元素值的大小,因此这里需要申请一个临时变量temp。
        测试样例: {-6,8,-2,0,9,-11,-15}
        样例输出:-15,-11,-6,-2,0,8,9

public class HelloWorld {
    public static void main(String []args) {
		int[] arr = {-6,8,-2,0,9-11,-15};
		for(int i = 0;i<arr.length-1;i++){
			for(int j = 0;j<arr.length-1-i;j++){
				if(arr[j]>arr[j+1]){
					int temp = arr[j];
					arr[j] = arr[j+1];
					arr[j+1] = temp;
					}
				}
			}		
		for(int i=0;i<arr.length;i++){			
			System.out.print(arr[i]+",");
		}
    }
}

四、Python代码实现

        测试样例: [-2,-8,12,25,-7,0,10]
        样例输出:[-8,-7,-2,0,10,12,25]

def maopao(ls) :
	for i in range(0, len(ls)-1):
			for j in range(0, len(ls)-i-1):
					if ls[j] > ls[j+1]:
						ls[j], ls[j + 1] = ls[j + 1], ls[j]
	return ls

if __name__ == '__main__':
	ls = [-2,-8,12,25,-7,0,10]
	res = maopao(ls)
	print(res)

五、复杂度分析

5.1时间复杂度分析

        在完全有序的情况下,最好的时间复杂度是O(n),只需要1次冒泡。而在极端情况完全逆序,时间复杂度为O(n^2)。平均情况下时间复杂度是O(n²)。

5.2空间复杂度分析

        空间复杂度为:O(1)。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

想什么起什么~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值