冒泡排序

冒泡排序(Bubble Sorting)的基本思想

通过对待排序序列从前向后(从下标较小的元素开始),依次比较相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前移向后部,就像水底下的气泡一样逐渐向上冒。
图解:
 

 

 

 

小结:

(1) 一共进行(数组的大小-1)次大的循环
(2)每一趟排序的次数在逐渐的减少
(3) 如果我们发现在某趟排序中,没有发生一次交换, 可以提前结束冒泡排序。这个就是优化 优化:

因为排序的过程中,各元素不断接近自己的位置,如果一趟比较下来没有进行过交换,就说明序列有序,因此要在 排序过程中设置一个标志 flag 判断元素是否进行过交换。从而减少不必要的比较。

代码实现

//将五个无序的数:3,9,-1,10,-2使用冒泡排序法将其排成一个从小到大的有序数列。

1. public class bubblesort {  
2.     public static void main(String[] args) {  
3.         int[] arr = {3, 9, -1, 10, -2};  
4.         System.out.println("原数组为:" + Arrays.toString(arr));  
5.         bubbleSort(arr);  
6.         System.out.println("排序后数组为:" + Arrays.toString(arr));  
7.     }  
8.   
9.     // 冒泡排序 的时间复杂度 O(n^2)  
10.     private static void bubbleSort(int[] arr) {  
11.         int temp = 0;// 临时变量  
12.         for (int i = 0; i < arr.length - 1; i++) {  //第一层for表示几趟
13.             boolean flag = false;// 标识变量,表示是否进行过交换(优化)  
14.             for (int j = 0; j < arr.length - 1 - i; j++) {  //第二层for表示每一趟如何做
15.                 if (arr[j] > arr[j + 1]) {// 如果前面的数比后面的数大,则交换  
16.                     flag = true;  
17.                     temp = arr[j];  
18.                     arr[j] = arr[j + 1];  
19.                     arr[j + 1] = temp;  
20.                 }  
21.             }  
22.             if (!flag) { //在一趟排序中,一次交换都没有发生过  
23.                 break 
24.             }  
25.         }  
26.     }  
27. }  

 

posted @ 2020-11-02 14:44  白刃天使  阅读(96)  评论(0编辑  收藏  举报