冒泡排序_java
1、百度百科的说法为:
冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。
它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。
详细说明,可以去收索了解更多。

2、我的理解:
冒泡排序就是,相邻的两个数据比较, 后面一个元素大于前面一个元素就替换。联想鱼吐泡,泡越变越大。(给人的感觉)估计这就是为什么叫冒泡算法的原因吧。
一下为一趟冒泡的图解说明。

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、不知道你有没有发现一个问题,冒泡排序需要每次都交换数据,这样是否会影响排序的速度呢,我们能不能又什么其他方式解决少交换次数呢。
