冒泡排序
冒泡排序
什么是冒泡排序
冒泡排序(Bubble Sort)是一种典型的交换排序算法,通过交换数据元素的位置进行排序
原理
比较两个相邻的元素,将值大的元素交换至右端(以从小到大排序为例),动态效果如下图:

举例说明(从小到大排序为例,删除线标识的是相互比较的两个数)
最初的数组 【1,5,4,7,3】
第一轮排序:
【1,5,4,7,3】变为【1,5,4,7,3】
【1,5,4,7,3】变为【1,4,5,7,3】
【1,4,5,7,3】变为【1,4,5,7,3】
【1,4,5,7,3】变为【1,4,5,3,7】
一轮排序后 【1,4,5,3,7】
第二轮比较:
【1,4,5,3,7】变为【1,4,5,3,7】
【1,4,5,3,7】变为【1,4,5,3,7】
【1,4,5,3,7】变为【1,4,3,5,7】
二轮排序后 【1,4,3,5,7】
第三轮排序:
【1,4,3,5,7】变为【1,4,3,5,7】
【1,4,3,5,7】变为【1,3,4,5,7】
三轮排序后 【1,3,4,5,7】
第四轮排序:
【1,3,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

浙公网安备 33010602011771号