冒泡排序

冒泡排序

什么是冒泡排序

冒泡排序(Bubble Sort)是一种典型的交换排序算法,通过交换数据元素的位置进行排序

原理

比较两个相邻的元素,将值大的元素交换至右端(以从小到大排序为例),动态效果如下图:

举例说明(从小到大排序为例,删除线标识的是相互比较的两个数)

最初的数组 【1,5,4,7,3】

第一轮排序:

15,4,7,3】变为【1,5,4,7,3】

【1,54,7,3】变为【1,4,5,7,3】

【1,4,57,3】变为【1,4,5,7,3】

【1,4,5,73】变为【1,4,5,3,7】


一轮排序后 【1,4,5,3,7】

第二轮比较:

14,5,3,7】变为【1,4,5,3,7】

【1,45,3,7】变为【1,4,5,3,7】

【1,4,53,7】变为【1,4,3,5,7】


二轮排序后 【1,4,3,5,7】

第三轮排序:

14,3,5,7】变为【1,4,3,5,7】

【1,43,5,7】变为【1,3,4,5,7】


三轮排序后 【1,3,4,5,7】

第四轮排序:

13,4,5,7】变为【1,3,4,5,7】

代码

public class BubbleSort{
	public int[] bubbleSort(int[] arr){
		// 外层循环
		for(int i = 0; i < arr.length; i++){
			// 内层循环
			for(int j = 0; j < arr.length - i - 1; j++){
				// 交换位置
				if(arr[j] > arr[j + 1]){
					int temp = arr[j];
					arr[j] = arr[j + 1];
					arr[j + 1] = temp;
				}
			}
		}
		return arr;
	}		
}

代码理解:“N个数字要排序完成,总共进行N-1趟排序,每i趟的排序次数为(N-i)次,外层循环控制比较轮数,内层循环控制每轮比较次数。“对于这种说法,没问题,但我个人觉得就是你知道冒泡排序什么原理再去看这句话没问题,但你如果从这句话去理解冒泡排序容易造成混乱。这句话可以作为你你记忆和检验代码的一个依据,理解的话还是从原理出发。

思路:【1️⃣2️⃣3️⃣4️⃣5️⃣】代码就是要实现这个原理,先写内部循环,就写第一次排序,怎么依次进行相邻元素比较,然后大的向右移动,然后在写外部循环,结合内部循环怎么满足上面说的这种效果。

总结

(从小到大排序为例)其实每一轮排序都是从开始然后相邻元素两两比较,大的右移,直到最大一个数冒出,只不过每一轮比较之后,下一轮比较都会少一个元素进行比较,因为第一轮当中两两比较,确定出最大数,然后第二轮就不用再让最大数参与比较了,因为已经确定最大数是谁了,只需要比较其他元素就可以了,同理第二轮比较可以确定一个第二大的数,一次循环下去就可以确定第三大,第四大,第五大......进而排序完成。

参考资料

https://www.cnblogs.com/onepixel/p/7674659.html

https://www.cnblogs.com/zxfei/p/10706965.html

https://www.cnblogs.com/bigdata-stone/p/10464243.html

posted @ 2020-11-20 14:15  从夜里偷几点钟  阅读(82)  评论(0)    收藏  举报