最近想練一練Java的算法,然后碰到LeetCode上一道從排序數組刪除重復項的小題,剛開始沒看到是從排序數組中,就亂寫,其實要是排序樹組,就比亂序的感覺上好寫多了。然后就想回顧下冒泡法對數組排序,憑感覺寫的,寫到最后成了選擇排序……呃……
簡單對冒泡法和選擇排序法介紹一下。
冒泡法是兩兩比較,兩兩交換,逐漸的把最大的弄到最后(最前),最小的弄到最前(最后)。網上有很多例子。
而選擇排序法是每次都選出最小的放到最前(最后),然后再從剩下的數里面選出里面最小的再放到第二位(倒數第二位)。
1 public class Solution { 2 public static void main(String[] args) { 3 int[] nums = {10, 12, 6, 4, 8, 3, 7, 23, 65, 12}; 4 for (int i = 0; i < nums.length; i++) { //第一個for循環 5 int n = nums[i], a = i, change; //定義第二個for循環需要用的東西 6 for (int j = i; j < nums.length - 1; j++) { //每次都讓j=i,想要做的是在第i個以及以后選擇最小的放到第i位 7 if (nums[j + 1] < n) { //如果下一個比n小,就讓n等於下一個,for循環結束時n就是最小的 8 n = nums[j + 1]; 9 } 10 for (int x = 0; x < nums.length; x++) { //這個for循環的作用是找到最小的那一位數並用a記錄 11 if (n == nums[x]) { 12 a = x; 13 } 14 } //內for結束 15 } //外for結束 16 change = nums[i]; //把最小的和第一位交換 17 nums[i] = nums[a]; 18 nums[a] = change; 19 } 20 for (int x : nums) { //foreach輸出數組 21 System.out.print(" " + x); 22 } 23 24 } 25 }
可能我潛意識里就覺得選擇排序法思路更清晰一些吧……好像執行速度還挺短的,以后也會多進行這樣的小練習。
