1.冒泡排序。2.左旋數組K次,3.將數組中偶數置前,奇數置後

冒泡排序:數組

//無序 [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;
}
相關文章
相關標籤/搜索