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] ;
}