冒泡排序:數組
//無序 [0, a.length - i) // 有序 [a.length - i, a.length) // 冒泡過程 無序在前,有序在後。每次都遍歷無序區間,每一次比較出一個數放在後面。 public static void bubbleSort(int[] a) { for (int i = 0; i < a.length; i++) { boolean sorted = true; // 無序 [0, a.length - i) // 有序 [a.length - i, a.length) // 冒泡過程 for (int j = 1; j < a.length - i; j++) { if (a[j - 1] > a[j]) { swap(a, j - 1, j); sorted = false; } } if (sorted == true) { return; } } } 代碼二: public static void bubbleSort1(int[] a) { for (int i = 0; i < a.length; i++) { // 無序 [i, a.length) // 有序 [0, i) for (int j = a.length - 1; j > i; j--) { if (a[j] < a[j - 1]) { swap(a, j, j - 1); } } } } 2.左旋數組:K次 要判斷K與數組長度的關係。 當K<arr.length 正常處理 當K>arr.length K=K%arr.length 作法:先把原數組後K個數組拷貝出來 把原數組前K-arr.length後移K位(利用數組拷貝覆蓋原來的) 將以前拷貝的新數組拷貝到後移後的數組 3.數組偶數放前,奇數放後 遍歷整個數組,定義兩個變量,一個遍歷數組,一個做爲標記,它以前的全是偶數,停留的位置是奇數,之後遇到了偶數和它交換位置。 public static int[] partition1(int[] nums) { int begin = 0; int end = nums.length - 1; // [begin, end] 區間內的數是未判斷的數 // [0, begin) 偶數 // [end, nums.length) 奇數 while (begin < end) { while (begin < end && nums[begin] % 2 == 0) { begin++; } while (begin < end && nums[end] % 2 != 0) { end--; } swap(nums, begin, end); } return nums; }