前言
作爲一個大學學過數據結構的學渣來說,整個四年除了直到一個冒泡排序(當然了也不理解,只是爲了應付面試而背的代碼),其它排序算法都不懂,於是乎在自己應對面試的時候隨便一個算法題自己就懵逼了,表情如下:
更慘的是自己去學習刷力扣題的時候除了會用for循環,什麼都不知道了。
於是痛定思痛,開始自己排序算法的學習,畢竟只要肯學就不算晚。
好了言歸正傳,今天開始學習的是冒泡排序,自己雖然會寫冒泡排序的邏輯代碼,但是沒有研究過爲什麼他要那麼執行啊,所以呢自己就要知其所以然。
自己的理解如下:
import java.util.Arrays;
/**
* @author Administrator
* 冒泡排序中,對數組中的元素進行循環,將每次循環的值與該值後面的值進行比較,若大於則進行交換
* 每次循環都可以將最大的值依次排序到後面
* 這樣最小的值就排列到前面
* 從而完成排序的邏輯
*
*
* 給出一個2 5 4 3 1 的數組
* 第一次排序:2和5比較,2小於5,不交換位置 2 5 4 3 1
* 5和4比較,5大於4,交換位置 2 4 5 3 1
* 5和3比較,5大於3,交換位置 2 4 3 5 1
* 5和1比較,5大於1,交換位置 2 4 3 1 5
* 第二次排序:2和4比較,2小於4,不交換位置 2 4 3 1 5
* 4和3比較,4大於3,交換位置 2 3 4 1 5
* 4和1比較,4大於1,交換位置 2 3 1 4 5
* 第三次排序:2和3比較,2小於3,不交換位置 2 3 1 4 5
* 3和1比較,3大於1,交換位置 2 1 3 4 5
* 第四次排序:2和1交換位置,2大於1,交換位置1 2 3 4 5
*
*
*/
public class bubbleSort {
public static void bubbleSort(int[] array){
//第一次循環 循環出數組中的元素
for (int i = 0; i < array.length; i++) {
//第二次循環 控制元素需要循環的次數,第一次冒泡時會將最大的值排序到最後面
//第二次循環時,會將第二大的值排序到倒數第二個數中
//依次類推,每次進行循環時不需要再對後面已經排好序的值進行排序了
//所以長度進行一個-i-1的操作
for (int j = 0; j < array.length -i -1; j++) {
//交換元素
if (array[j]>array[j+1]){
int temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
}
}
}
}
public static void main(String[] args) {
int[] arr = new int[5];
arr[0]=2;
arr[1]=5;
arr[2]=4;
arr[3]=3;
arr[4]=1;
System.out.println(Arrays.toString(arr));
bubbleSort(arr);
System.out.println(Arrays.toString(arr));
}
}