Java排序之冒泡排序算法

原理

依次比较相邻的两个元素,若前者比后者大,则交换两个元素的位置,否则,则不交换。每比较完一轮,最后的那个数就是参与比较的数中最大的数字。
除去上一轮比较出来的那个最后的数,剩下的数再参与比较,同样的方法依次比较相邻的两个元素,得出参与比较的数中最大的数。…直到比较到最后一个数,比较完成。

复杂度

最好的时间复杂度:O(n)
最坏的时间复杂度:O(n^2)
平均时间复杂度:O(n^2)

举例

假设数组中数据为 int[] arr={3,0,7,8,2}
第一轮循环:
( 第一次比较:3和0比较,交换位置): 0,3,7,8,2
( 第二次比较:3和7比较,不交换位置): 0,3,7,8,2
( 第三次比较:7和8比较,不交换位置): 0,3,7,8,2
( 第四次比较:8和2比较,交换位置): 0,3,7,2,8
至此,第一轮循环完成,得出8为最大数,接下来比较剩余的数:0,3,7,2
第二轮循环:
( 第一次比较:0和3比较,不交换位置): 0,3,7,2
( 第二次比较:3和7比较,不交换位置): 0,3,7,2
( 第三次比较:7和2比较,交换位置): 0,3,2,7
至此,第二轮循环完成,得出7为参与比较的数中的最大数,接下来比较剩余的数:0,3,2
第三轮循环:
( 第一次比较:0和3比较,不交换位置): 0,3,2
( 第二次比较:3和2比较,交换位置): 0,2,3
至此,第三轮循环完成,得出3为参与比较的数中的最大数,接下来比较剩余的数:0,2
第四轮循环:
( 第一次比较:0和2比较,不交换位置): 0,2
至此,第四轮循环完成,得出2为参与比较的数中的最大数
所以排序为0,2,3,7,8

java代码

public static void main(String[] args){
		int[] arr={3,0,7,8,2};
		//外层循环比较n-1次(n为数组长度)
		//使用i--可以避免数组越界问题,且内层循环可以直接使用i
		for (int i=arr.length-1;i>0 ;i-- )
		{
			//内层循环比较i次,i为每次参与比较的数字长度
			for (int j=0;j<i ;j++ )
			{
				if (arr[j]>arr[j+1])
				{
					//定义一个临时变量交换位置
					int temp;
					temp=arr[j];
					arr[j]=arr[j+1];
					arr[j+1]=temp;

				}
			}
		}
		//依次输出拍过序的数组元素
		for (int i=0;i<arr.length ;i++ )
		{
			System.out.println(arr[i]);
		}
	}

结果

0
2
3
7
8

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值