0.如果遇到相等的值不進(jìn)行交換,那這種排序方式是穩(wěn)定的排序方式。
1.原理:比較兩個相鄰的元素,將值大的元素交換到右邊
2.思路:依次比較相鄰的兩個數(shù),將比較小的數(shù)放在前面,比較大的數(shù)放在后面。
(1)第一次比較:首先比較第一和第二個數(shù),將小數(shù)放在前面,將大數(shù)放在后面。
(2)比較第2和第3個數(shù),將小數(shù) 放在前面,大數(shù)放在后面。
......
(3)如此繼續(xù),知道比較到最后的兩個數(shù),將小數(shù)放在前面,大數(shù)放在后面,重復(fù)步驟,直至全部排序完成
(4)在上面一趟比較完成后,最后一個數(shù)一定是數(shù)組中最大的一個數(shù),所以在比較第二趟的時候,最后一個數(shù)是不參加比較的。
(5)在第二趟比較完成后,倒數(shù)第二個數(shù)也一定是數(shù)組中倒數(shù)第二大數(shù),所以在第三趟的比較中,最后兩個數(shù)是不參與比較的。
(6)依次類推,每一趟比較次數(shù)減少依次
3.算法復(fù)雜度
此算法的優(yōu)點是每次循環(huán)都會比上一圈少一次
如果數(shù)據(jù)正序只需要一趟排序就可以排完,如果是完全反序則需要O(n^2)
4.代碼實現(xiàn)
package me.hetao;
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
// write your code here
int arr[] = {9,6,3,1,2};
int sortArr[] = bubbleSort(arr);
System.out.println(Arrays.toString(sortArr));
}
public static int[] bubbleSort(int arr[]) {
int temp;
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]) {
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
return arr;
}
}