1. 认识冒泡排序
双层for循环,每次选出最大的数“浮”到数组的最后面;时间复杂度O( n 2 n^2 n 2 ),空间复杂度O(1); 重复地遍历待排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。
2. 图示
2.1 图示1
2.2 图示2
3. 代码
public static void bubbleSort ( int [ ] arr) { if ( arr == null || arr. length < 2 ) { return ; } for ( int e = arr. length - 1 ; e > 0 ; e-- ) { for ( int i = 0 ; i < e; i++ ) { if ( arr[ i] > arr[ i + 1 ] ) { swap ( arr, i, i + 1 ) ; } } } } public static void bubbleSort1 ( int [ ] arr) { if ( arr == null || arr. length < 2 ) { return ; } for ( int i = 0 ; i < arr. length - 1 ; i++ ) { boolean swapped = false ; for ( int j = 0 ; j < arr. length - i - 1 ; j++ ) { if ( arr[ j] > arr[ j + 1 ] ) { swap ( arr, j, j + 1 ) ; swapped = true ; } } if ( ! swapped) { break ; } } } public static void swap ( int [ ] arr, int i, int j) {
arr[ i] = arr[ i] ^ arr[ j] ; arr[ j] = arr[ i] ^ arr[ j] ; arr[ i] = arr[ i] ^ arr[ j] ; }