冒泡排序
冒泡排序(Bubble Sort)是一种最基础的交换排序。依次比较相邻元素的大小,如果为逆序则交换它们的位置,第一轮完后,最大值在最右边,再依次比较,直到第n-1轮后,所有的数字都是顺序。
package io.github.wangpeng;
import java.util.Arrays;
public class BubbleSort {
public static void main(String[] args) {
int[] arr = {4, 9, 7, 3, 0, };
for (int i = 0; i < arr.length - 1; i++) {
for (int j = 0; j < arr.length - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
int temp = arr[j + 1];
arr[j + 1] = arr[j];
arr[j] = temp;
}
}
System.out.println("第" + (i + 1) + "轮:" + Arrays.toString(arr));
}
}
}
第1轮:[4, 7, 3, 0, 9]
第2轮:[4, 3, 0, 7, 9]
第3轮:[3, 0, 4, 7, 9]
第4轮:[0, 3, 4, 7, 9]
选择排序
选择排序( Selection sort)是一种简单直观的排序算法。第一次从待排序的数据元素中选出最小的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。
package io.github.wangpeng;
import java.util.Arrays;
public class SelectSort {
public static void main(String[] args) {
int[] arr = {4, 9, 7, 3, 0};
int min;
System.out.println("原数组:" + Arrays.toString(arr));
for (int i = 0; i < arr.length - 1; i++) {
min = i;
for (int j = i + 1; j < arr.length; j++) {
if (arr[j] < arr[min]) {
min = j;
}
}
if (min != i) {
int temp = arr[min];
arr[min] = arr[i];
arr[i] = temp;
}
System.out.println("第" + (i + 1) + "轮:" + Arrays.toString(arr));
}
}
}
原数组:[4, 9, 7, 3, 0]
第1轮:[0, 9, 7, 3, 4]
第2轮:[0, 3, 7, 9, 4]
第3轮:[0, 3, 4, 9, 7]
第4轮:[0, 3, 4, 7, 9]
插入排序
插入排序(InsertionSort),一般也被称为直接插入排序。将原始数组划分为有序序列以及无序序列。首先将第一个元素当作有序序列,后面的其他元素当作无序序列,将无序序列中第一个元素插入到已经排好序的有序表中,依次插入,类似于平时玩的扑克牌。
package io.github.wangpeng;
import java.util.Arrays;
public class InsertionSort {
public static void main(String[] args) {
int[] array = {4, 2, 6, 1, 5};
System.out.println("原数组:" + Arrays.toString(array));
for (int i = 0; i < array.length - 1; i++) {
// 从索引1开始,也就是第二个元素
for (int j = i + 1; j > 0 && array[j] < array[j - 1]; j--) {
// 如果数组中下标j的元素小于下标为j-1的元素,则交换位置。
int temp = array[j];
array[j] = array[j - 1];
array[j - 1] = temp;
}
System.out.println("第" + (i + 1) + "轮" + Arrays.toString(array));
}
}
}
原数组:[4, 2, 6, 1, 5]
第1轮[2, 4, 6, 1, 5]
第2轮[2, 4, 6, 1, 5]
第3轮[1, 2, 4, 6, 5]
第4轮[1, 2, 4, 5, 6]