冒泡排序:数组
//无序 [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; }