Java中对冒泡排序的深入理解

  1. 程序员不仅要学会敲代码,更要学会算法与数据结构,算法与数据结构是程序员的必修课程,今天我就来讲讲如何理解并进行实践冒泡排序。
  2. 对冒泡排序的理解:
题目:请把(3 2 1 8 10 6 4 9)按照从小到大的顺序用冒泡排序排列出来
参与排序的数字;3 2 1 8 10 6 4 9
第一次循环:
2 3 1 8 10 6 4 9(2与3比较):不交换
2 1 3 8 10 6 4 9(3与1比较):交换
2 1 3 8 10 6 4 9(3与8比较):不交换
2 1 3 8 10 6 4 9(8与10比较):不交换
2 1 3 8 6 10 4 9(10与6比较):交换
2 1 3 8 6 4 10 9(10与4比较):交换
2 1 3 8 6 4 9 10(10与9比较):交换
此时最右边的数字为10,将10冒出来。

参与排序的数字:2 1 3 8 6 4 9
第二次循环:
1 2 3 8 6 4 9(2与1比较):交换
1 2 3 8 6 4 9(2与3比较):不交换
1 2 3 8 6 4 9(3与8比较):不交换
1 2 3 6 8 4 9(8与6比较):交换
1 2 3 6 4 8 9(8与4比较):交换
1 2 3 6 4 8 9(8与9比较):不交换
此时最右边的数字为9,将9冒出来。

参与排序的数字:1 2 3 6 4 8
第三次循环:
1 2 3 6 4 8(1与2比较):不交换
1 2 3 6 4 8(2与3比较):不交换
1 2 3 6 4 8(3与6比较):不交换
1 2 3 4 6 8(6与4比较):交换
1 2 3 4 6 8(6与8比较):不交换
此时最右边的数字为8,将8冒出来。

参与排序的数字:1 2 3 4 6
第四次循环:
1 2 3 4 6(1与2比较):不交换
1 2 3 4 6(2与3比较):不交换
1 2 3 4 6(3与4比较):不交换
1 2 3 4 6(4与6比较):不交换
此时最右边的数字为6,将6冒出来。

参与排序的数字:1 2 3 4
第五次循环:
1 2 3 4(1与2比较):不交换
1 2 3 4(2与3比较):不交换
1 2 3 4(3与4比较):不交换
此时最右边的数字为4,将4冒出来。

参与排序的数字:1 2 3
第六次循环:
1 2 3(1与2比较):不交换
1 2 3(2与3比较):不交换
此时最右边的数字为3,将3冒出来。

参与排序的数字:1 2
第七次循环:
1 2(1与2比较):不交换
此时最右边的数字为2,将2冒出来。

上面题目中可以看出来冒泡排序算法的步骤,从步骤中可以看出:
八个数字七次比较
七个数字六次比较
六个数字五次比较

从中可以推断出当有N个数字时,有N-1次比较。
此时我们可以用代码把它写出来:

public class Test {
	public static void main (String[] args) {
		bubbling();
	}
	
	// 冒泡排序的方法
	public static void bubbling () {
		// 这里定义一个数组,数组当中设置好元素
		int[] array = {3, 2, 1, 8, 10, 6, 4, 9};
		// 外层for循环是用来判断数组中元素的个数
		for (int m = array.length; m > 0 ; m --) {
			// 内层for循环是用来做冒泡中的比较的(N个元素比较N-1次)
			for (int n = 0 ; n < m - 1 ; n ++) {
				// 当左边的元素大于右边的元素时
				if(array[n] > array[n + 1]) {
					// 左边的元素与右边的元素交换位置
					int temp = array[n];
					array[n] = array[n + 1];
					array[n + 1] = temp;
				}
			}
		}
		// 将所得的新的array数组进行遍历
		for (int i = 0 ; i < array.length; i ++) {
			System.out.print(array[i] + " ");
		}
	}
}
输出结果:1 2 3 4 6 8 9 10
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值