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