接下来我准备发表一系列关于排序的算法,本文我准备用Java实现冒泡排序、插入排序、选择排序。具体的排序算法过程已经在注释里面了,大家可看注释,也可复制代码到IDE里面,用DEBUG模式研究算法的过程:
1、冒泡排序(BubbleSort):
import java.util.Arrays;
/**
* @author LiYang
* @ClassName BubbleSort
* @Description 冒泡排序算法
* @date 2019/11/4 11:14
*/
public class BubbleSort {
/**
* 冒泡排序算法(BubbleSort):
* 每次排序,从左到右两两依次比较,
* 保证将较大的数放在两两的右边,
* 一次遍历,就将遍历区最大数放到了最右边。
* 然后再两两比较上一次最大数的左边区域
* @param arr 待排序数组
*/
public static void bubbleSort(int[] arr) {
for (int i = 0; i < arr.length - 1; i++) {
for (int j = 0; j < arr.length - i - 1; j++) {
//一次交换,就是大数往右冒一下泡
if (arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
/**
* 运行冒泡排序算法
* @param args
*/
public static void main(String[] args) {
//待排序数组
int[] arr = {3,6,4,2,5,1,9,8,7,0};
//打印待排序数组
System.out.println("冒泡排序前:" + Arrays.toString(arr));
//进行冒泡排序
bubbleSort(arr);
//打印冒泡排序后的数组
System.out.println("冒泡排序后:" +Arrays.toString(arr));
}
}
运行 BubbleSort 类的main方法,冒泡排序算法测试通过:
冒泡排序前:[3, 6, 4, 2, 5, 1, 9, 8, 7, 0]
冒泡排序后:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
2、插入排序(InsertSort):
import java.util.Arrays;
/**
* @author LiYang
* @ClassName InsertSort
* @Description 插入排序算法
* @date 2019/11/4 11:20
*/
public class InsertSort {
/**
* 插入排序算法(InsertSort):
* 将排序数组分为两个区域:左边乱序区和右边有序区
* 逐渐将左边乱序区的元素,依次与右边有序区比较
* 如果遇到比自己小的,就继续往右前进,直到插入到
* 刚好比自己大的元素的左边
* @param arr 待排序数组
*/
public static void insertSort(int[] arr) {
for (int i = 0; i < arr.length; i++) {
for (int j = arr.length - i - 1; j < arr.length - 1; j++){
//如果还没遇到有序区刚好比自己大的元素,则交换前进
if (arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
//遇到了刚好比自己大的元素,表示已插入正确的位置,停下
} else {
break;
}
}
}
}
/**
* 运行插入排序算法
* @param args
*/
public static void main(String[] args) {
//待排序数组
int[] arr = {3,6,4,2,5,1,9,8,7,0};
//打印待排序数组
System.out.println("插入排序前:" + Arrays.toString(arr));
//进行插入排序
insertSort(arr);
//打印插入排序后的数组
System.out.println("插入排序后:" +Arrays.toString(arr));
}
}
运行 InsertSort 类的main方法,插入排序算法测试通过:
插入排序前:[3, 6, 4, 2, 5, 1, 9, 8, 7, 0]
插入排序后:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
3、选择排序(SelectSort):
import java.util.Arrays;
/**
* @author LiYang
* @ClassName SelectSort
* @Description 选择排序算法
* @date 2019/11/4 11:26
*/
public class SelectSort {
/**
* 选择排序算法(SelectSort):
* 依次将从左到右的元素进行选择,如果后面的元素
* 有比自己小的,则选择与之交换,然后再往后比,
* 又遇到更小的,又与之交换。遍历完一遍后,左边
* 的元素就是最小的了,这个的位置就定了,然后右边
* 的下一个又继续往右边比,又选出第二小的,以此类推
* @param arr 待排序数组
*/
public static void selectSort(int[] arr) {
for (int i = 0; i < arr.length; i++) {
for (int j = i + 1; j < arr.length; j++) {
//注意这里的下标,小的元素都是与arr[i]交换
//最后arr[i]就是选出来的最小的元素
if (arr[j] < arr[i]) {
int temp = arr[j];
arr[j] = arr[i];
arr[i] = temp;
}
}
}
}
/**
* 运行选择排序算法
* @param args
*/
public static void main(String[] args) {
//待排序数组
int[] arr = {3,6,4,2,5,1,9,8,7,0};
//打印待排序数组
System.out.println("选择排序前:" + Arrays.toString(arr));
//进行选择排序
selectSort(arr);
//打印选择排序后的数组
System.out.println("选择排序后:" +Arrays.toString(arr));
}
}
运行 SelectSort 类的main方法,选择排序算法测试通过:
选择排序前:[3, 6, 4, 2, 5, 1, 9, 8, 7, 0]
选择排序后:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]