《排序算法》系列 -淺顯易懂的認識---冒泡排序

前言

作爲一個大學學過數據結構的學渣來說,整個四年除了直到一個冒泡排序(當然了也不理解,只是爲了應付面試而背的代碼),其它排序算法都不懂,於是乎在自己應對面試的時候隨便一個算法題自己就懵逼了,表情如下:
在這裏插入圖片描述
更慘的是自己去學習刷力扣題的時候除了會用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));
    }
}

以上就是對冒泡排序的理解,自己在進行研究邏輯時,直接將邏輯寫在代碼中,方便自己的理解和記憶。

有問題歡迎給予指正,謝謝

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章