冒泡排序

一、基本思想
  • 通过对待排序序列从后向前(从下标较大的元素开始),依次比较相邻元素的排序码,若发现逆序则交换,使排序码较小的元素逐渐从后部移向前部(从下标较大的单元移向下标较小的单元),就象水底下的气泡一样逐渐向上冒。
二、核心步骤
  • 将第1和第2个两个关键字进行比较,若前者大于后者r[1].key>r[2].key,则交换,然后比较第2个记录与第3个记录,依次类推,直至第n-1个记录和第n个记录比较为止,以上为第一趟冒泡排序。
三、需要终止标记
  • 因为排序的过程中,各元素不断接近自己的位置,如果一趟比较下来没有进行过交换,就说明序列有序,因此要在排序过程中设置一个标志flag判断元素是否进行过交换。从而减少不必要的比较。
四、示例
  • 在这里插入图片描述
五、完整代码
//演示冒泡排序法
public class Demo132 {
	public static void main(String[] args) {
		int arr[]={1,6,0,-1,9,-100,90};
		int temp=0;
		//排序
		//外层循环,可以决定一共走趟
		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]){
					//换位
					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]+"\t");
		}
	}
}
六、时间复杂度 T(n)=O(n²)
  1. 最好情况(正序)
    比较次数:n-1
    移动次数:0

  2. 最坏情况(逆序)
    比较次数:在这里插入图片描述
    移动次数:在这里插入图片描述

七、空间复杂度 S(n)=O(1)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值