前言

  本篇博客是在伍迷兄的博客基础上进行的,其​​博客地址​​点击就可以进去,里面好博客很多,我的排序算法都来自于此;一些数据结构方面的概念我就不多阐述了,伍迷兄的博客中都有详细讲解,而我写这些博客只是记录自己学习过程,加入了一些自己的理解,同时也希望给别人提供帮助。

  无论你学习哪种编程语言,在学到循环和数组时,通常都会介绍一种排序算法来作为例子,而这个算法一般就是冒泡排序。并不是它的名称很好听,而是说这个算法的思路最简单,最容易理解。因此,哪怕大家可能都已经学过冒泡排序了,我们还是从这个算法开始我们的排序之旅。

基本思想

   两两比较相邻记录的关键字,如果反序则交换,直到没有反序的记录为止。冒泡的实现在细节上可以很多种变化,我们就最简单的一种冒泡实现代码,来讲解冒泡排序的思想。

代码实现

/**
* 冒泡排序
* 大的往下沉,小的往上冒
* @param arr
*/
public void buttleSort(int[] arr){
int len = arr.length;
// i表示第几轮比较(9个数字的话只需要比较8次)
for(int i=1; i<len; i++){
// 大的往下沉,小的往上冒
for(int j=len-1; j>=i; j--){
if(arr[j-1] > arr[j]){ // 若前者大于后者
swap(arr,j-1,j); // 交换arr[j-1]与arr[j]
}
}
}
}

 

执行过程模拟

  假设我们要排序的序列依然是{5,3,7,9,1,6,4,8,2},当i=1时,变量j由8反向循环到1,逐个比较,将较小值交换前面,直到最后找到最小值放置在了第1的位置。如图5-1,当i=1,j=8时,我们发 现8>2,因此交换了它们的位置,j=7时,4>2,所以交换……直到j=5时,因为1<2,所在不交换。j=1时,5>1,交 换,最终得到最小值1放置第一的位置。事实上,在不断循环的过程中,除了将关键字1放到第一的位置,我们还将关键字2从第九位置提到到了第六的位置。图中较小的数字如同气泡般慢慢浮到上面,因此就将此算法命名为冒泡算法。

排序之冒泡排序_排序

  当i=2时,变量j由8反向循环到2,逐个比较,在将关键字2交换到第二位置的同时,也将关键字4有所提升。

排序之冒泡排序_排序_02

  后面的过程一样的,这里就不在赘述了。

总结

那么如何进行改善,就当是给大家的思考题了

  对改善实在是没有办法的,可以点​​这里​​,讲到了冒泡排序的优化。