本文最后更新于 1364 天前,其中的信息可能已经有所发展或是发生改变。
冒泡排序
@Test
public void test() {
int[] arr = new int[]{3, 4, 1, 76, 3, 889, 8, 4};
for (int i = 0; i < arr.length - 1; i++) {
for (int j = arr.length - 2; j >= i; j--) {
if (arr[j + 1] < arr[j]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
System.out.println(ArrayUtils.toString(arr));
}
插入排序
@Test
public void test() {
int[] arr = new int[]{3, 4, 1, 76, 3, 889, 8, 4};
for (int i = 1; i < arr.length; i++) {
int x = arr[i];
int j = i - 1;
for (; j >= 0; j--) {
if (x >= arr[j]) {
break;
}
// 插入的x比当前位置的值小,当前值就往后挪一个位置,给以后插入x腾位置
arr[j + 1] = arr[j];
}
// 插入的x比当前位置的值大,就将x插入到当前位置的后面
arr[j + 1] = x;
}
System.out.println(ArrayUtils.toString(arr));
}
快速排序
@Test
public void test() {
int[] arr = new int[]{3, 4, 1, 76, 3, 889, 8, 4};
sort(arr, 0, arr.length - 1);
System.out.println(ArrayUtils.toString(arr));
}
private void sort(int[] arr, int left, int right) {
if (right - left < 1) {
return;
}
int leftOld = left;
int rightOld = right;
// 取左边的值为中间值
int midValue = arr[left];
// right指针移动
boolean highFlag = true;
while (left != right) {
if (highFlag) {
if (arr[right] < midValue) {
// 比中间值小,将值放到左指针那里
arr[left] = arr[right];
// left指针移动
highFlag = false;
// left指针刚给值了,就从下一个开始
left++;
} else {
// 比中间值大,继续移动right指针
right--;
}
} else {
if (arr[left] > midValue) {
arr[right] = arr[left];
highFlag = true;
right--;
} else {
left++;
}
}
}
// left指针为中间位置,给中间位置赋值之前取得中间值
arr[left] = midValue;
// 分治
sort(arr, leftOld, left - 1);
sort(arr, left + 1, rightOld);
}
杨哥真狠,520就搞这个
哈哈哈,爱情只会拖慢我写代码的速度