冒泡排序_java
最近工作比较清闲,就闲来无事回顾了一下算法知识,在之前的经验中提及到一篇快速查找的经验,二分查找法,没有写过排序的经验,今天下写一篇简单的冒泡排序,后续将写 选择排序,插入排序,归并排序 以及 快速排序的相关经验。
工具/原料
eclipse
笔/笔记本
什么是冒泡排序
1、百度百科的说法为: 冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。 它重拎粹蠃账复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。详细说明,可以去收索了解更多。
2、我的理解:冒泡排序就是,相邻的两个数据比较, 后面一个元素大于前面一个元素就替换。联想鱼吐泡,泡越变越大。(给人的感觉)估计这就是为什么叫冒泡算法的原因吧。一下为一趟冒泡的图解说明。
基于eclipse下的冒泡排序实现
1、根据冒泡排序的的原理,我们先分析第一趟排序,即一个for从第一个到最后一个 只用比较后一个进行排序,参考下列代码。 int [柯计瓤绘]arr = {1,4,5,2,3}; int tem; for(int i = 0; i < arr.length-1; i++){//进行数据交换 if(arr[i] > arr[i+1]){ tem = arr[i]; arr[i] = arr[i+1]; arr[i+1] = tem; } } System.out.println("第一趟排序后:"); for(int j = 0 ; j < arr.length; j++){ System.out.print(arr[j]+","); }
2、完成了第一次排序以后我们应该怎么进行后续排序呢。使用冒泡排序每一次排序完成都是查找出当前数组类的最大数,因此当我们完成一次冒泡,我们就可以减少最后一个数的排序。参考下图:
3、如何在上诉代码中进行分析进而优化代码呢?这个问题需要分析一下,不过数学敏感的人应该发现一个问题,就是冒泡排序 每排一次就会减少一次次数,所有我们可以在上诉代码的断芡闽彝基础上,加一个控制来检查已经冒泡次数。参考代码: int []arr = {1,4,6,3,2,7,5,2,3}; int tem; for(int i = 0 ; i < arr.length-1; i++){// 参考上面补助,红色已排序数目。 for(int j = 0; j < arr.length - i-1; j++){//相当于对前面的数组重排 if(arr[j] > arr[j+1]){//此次和单趟排序思路一致 tem = arr[j]; arr[j] = arr[j+1]; arr[j+1] = tem; } } } System.out.println("冒泡排序后:"); for(int j = 0 ; j < arr.length; j++){ System.out.print(arr[j]+","); }
冒泡排序分析
1、不知道你有没有发现一个问题,冒泡排序需要每次都交换数据,这样是否会影响排序的速度呢,我们能不能又什么其他方式解决少交换次数呢。