原理分析
image.png
排序結果:
image.png
代碼
/**
* 冒泡排序
* 相鄰元素兩兩比較膘侮,大的往后放腕巡,第一次完畢后哗总,最大值就出現(xiàn)在
* 最大索引處论寨,同理录煤,繼續(xù),即可得到一個排序好的數(shù)組
*
* 規(guī)律:
* 1、兩兩比較,大的往后放蜈亩。
* 2懦窘、第一次比較完畢后前翎,下一次比較的時候就會減少一個元素的比較
* 3、第一次比較畅涂,有0個元素不比
* 第二次比較港华,有1個元素不比
* 第三次比較,有2個元素不比
* 第四次比較午衰,有3個元素不比
* .....
* 4立宜、總共需要比較數(shù)組的長度-1次
*/
public class BubbleSort {
public static void main(String[] args) {
int[] arr = {21,69,90,55,12};
//輸出數(shù)組
printArr(arr);
//詳細排序過程
detailSort(arr);
int[] arr2 = {23,59,34,88,2,99,68};
//最終版
endSort(arr2);
}
private static void endSort(int[] arr2) {
System.out.println();
System.out.println("原序列");
printArr(arr2);
//兩次for循環(huán)解決
for(int i = 0; i < arr2.length-1; i++){
for(int j=0; j < arr2.length-1-i;j++){
if(arr2[j] > arr2[j+1]){
int temp = arr2[j];
arr2[j] = arr2[j+1];
arr2[j+1] = temp;
}
}
}
System.out.println();
System.out.println("兩層循環(huán)排序");
printArr(arr2);
}
private static void detailSort(int[] arr) {
System.out.println();
System.out.println("第一次排序:");
//第一次排序
//arr.length-1 為了防止數(shù)據(jù)越界
//arr.length-1-0:為了減少比較的次數(shù)
for(int i=0; i < arr.length-1-0; i++){
if(arr[i] > arr[i+1]){
int temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = temp;
}
}
printArr(arr);
System.out.println();
System.out.println("第二次排序:");
//第二次排序
for(int i=0; i < arr.length-1-1; i++){
if(arr[i] > arr[i+1]){
int temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = temp;
}
}
printArr(arr);
System.out.println();
System.out.println("第三次排序:");
//第三次排序
for(int i=0; i < arr.length-1-2; i++){
if(arr[i] > arr[i+1]){
int temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = temp;
}
}
printArr(arr);
System.out.println();
System.out.println("第四次排序:");
//第四次排序
for(int i=0; i < arr.length-1-3; i++){
if(arr[i] > arr[i+1]){
int temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = temp;
}
}
printArr(arr);
}
//輸出數(shù)組
private static void printArr(int[] arr) {
System.out.println(Arrays.toString(arr));
}
}