临近的两个元素进行比较,然后互换顺序,一趟走完之后最大的或者最小的元素排在第一个或者最后一个位置(最大或者最小看实际需求),给的的感觉就是一个小泡泡一直冒啊冒,所以有个好听的名字叫冒泡算法
举个例子,有数组[10, 1, 18, 30, 23, 12, 7, 5, 18, 17],我们使用从小到大的排序方法
第一趟,外排下标为0,对应的值为10
内排开始
①下标0和下标1的值进行比较。10和1比,发现1比10小,进行互换,内排一次完成,结果是[1, 10, 18, 30, 23, 12, 7, 5, 18, 17]
②下标1和下标2的值进行比较。10和18比,10比18小,保持不变,结果是[1, 10, 18, 30, 23, 12, 7, 5, 18, 17]
③下标2和下标3的值进行比较。18和30比,18比30小,保持不变,结果是[1, 10, 18, 30, 23, 12, 7, 5, 18, 17]
④下标3和下标4的值进行比较。30和23比,30比23大,进行互换,结果是[1, 10, 18, 23, 30, 12, 7, 5, 18, 17]
……一直这样紧邻的两个数比下去,第一趟外排结束,结果是[1, 10, 18, 23, 12, 7, 5, 18, 17, 30],我们发现,我们经过了这一次排序,把最大值30送到了右侧
第二趟,外排下标是1
内排开始
①下标0和下标1的值进行比较。1和10比,1比10小,保持不变,内排一次完成,结果是[1, 10, 18, 23, 12, 7, 5, 18, 17, 30]
②下标1和下标2的值进行比较。10和18比,10比18小,保持不变,内排二次完成,结果是[1, 10, 18, 23, 12, 7, 5, 18, 17, 30]
…………
④下标3和下标4的值进行比较。12和23比,23比12小,进行互换,内排四次完成,结果是[1, 10, 18, 12, 23, 7, 5, 18, 17, 30]
⑤下标4和下标5的值进行比较。23和7比较,23比7大,进行互换,内排五次完成,结果是[1, 10, 18, 12, 7, 23, 5, 18, 17, 30]
…………经过一系列排序,结束,结果为[1, 10, 18, 12, 7, 5, 18, 17, 23, 30],这个时候我们把第二大的数据23放到正确的位置
第三趟
…………结果为[1, 10, 12, 7, 5, 18, 17, 18, 23, 30]
…………
…………
最终结果为[1, 5, 7, 10, 12, 17, 18, 18, 23, 30]
至此,排序完成。
package ttt;
public class BubbleSort {
public static int[] BubbleSort(int[] theArray) {
int tmp;
for(int i = 0; i < theArray.length; i++) {
for (int j= 0; j<theArray.length-i-1; j++) {
if (theArray[j] > theArray[j+1]) {
tmp = theArray[j];
theArray[j] = theArray[j+1];
theArray[j+1] =tmp;
}
}
}
return theArray;
}
public static void main(String[] args) {
int []the_array = {10,1,18,30,23,12,7,5,18,17};
System.out.print("之前的排序:");
for(int i = 0; i < the_array.length; i++) {
System.out.print(the_array[i] + " ");
}
int []result_array = BubbleSort(the_array);
System.out.print("冒泡排序:");
for(int i = 0; i < result_array.length; i++) {
System.out.print(result_array[i] + " ");
}
}
}
执行结果如下
之前的排序:10 1 18 30 23 12 7 5 18 17 冒泡排序:1 5 7 10 12 17 18 18 23 30
转载自:https://blog.csdn.net/stronglyh/article/details/82219917