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;
}
    原文作者:凉白开dream
    原文地址: https://blog.51cto.com/14232658/2441985
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞