冒泡排序
//冒泡排序 相邻的数比较,前面的数比后面的大,交换位置,没循环一次得到一个最大的值,并放到数组的末端,
//最大的数就像泡沫一样冒出来
@Test
public void bubbleSort() {
int[] array = {2, 3, 1, 10, 8, 23, 26, 14, 5};
if (array.length == 0 || array.length == 1) {
return;
}
//外层循环,循环次数
for (int i = 0; i < array.length; i++) {
//内层循环,每循环一次得出一个最大的数,并放置在数组的末端
for (int j = 0; j < array.length - 1 - i; j++) {
if (array[j] > array[j + 1]) {
int temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
}
}
}
System.out.println(Arrays.toString(array));
}
选择排序
//选择排序 选择第一个为最小值,和后面的比较,找到最小的值,并交换位置。第二轮选择第二个为最小值,和
//后面的比较,找到最小值,并交换位置。以此类推
@Test
public void selectionSort() {
int[] array = {2, 3, 1, 10, 8, 23, 26, 14, 5};
for (int i = 0; i < array.length; i++) {
//默认第一个是最小值
int min = array[i];
int index = i;
for (int j = i + 1; j < array.length; j++) {
if (min > array[j]) {
min = array[j];
index = j;
}
}
//第一轮比较完,交换位置,把最小值放在开头
int temp = array[i];
array[i] = min;
array[index] = temp;
}
System.out.println(Arrays.toString(array));
}
快速排序
@Test
public void quickSortTest() {
int[] array = {2, 3, 1, 12, 10, 8, 14, 26, 14, 50, 5};
quickSort(array, 0, array.length - 1);
System.out.println(Arrays.toString(array));
}
//快速排序 以第一个数为基准,左右各一个指针,右边指针先移动,找到比基准数小的数;
//左边后移动,找到比基准数大的数;然后交换这两个数,两个指针移动到相同的位置,跳出循环,然后把基准数
//和指针重合处交换;这样得到基准数左边的,都比基准数小,右边的都比基准数大,然后对左边和右边的递归执行同样的方法。
private void quickSort(int[] array, int start, int end) {
//递归条件
if (start > end) {
return;
}
//以第一个数为基准数
int base = array[start];
int i = start;
int j = end;
while (i < j) {
//右边找起,找到比基准数小的数
//右边的数比基准数大的正确的
while (array[j] >= base && i < j) {
j--;
}
//左边找起,找到比基准数大的数
//左边的数比基准数小是正确的
while (array[i] <= base && i < j) {
i++;
}
//交换两个数
if (i < j) {
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
//指针重合,跳出循环 和基准数交换位置
array[start] = array[i];
array[i] = base;
//对基准数两边的数 进行递归操作
quickSort(array, start, i - 1);
quickSort(array, i + 1, end);
}