其它经典排序算法:https://blog.csdn.net/weixin_43304253/article/details/121209905
插入排序算法:
思路:将数据分为已经排序好的数据和未排序的数据。取出未排序中的数据、从后向前的形式找到其在已经排好序数据中的位置、然后插入该数据。
过程
- 1、将数据分为已排序和未排序两组。默认第一个数据是已排序
- 2、从未排序数据中从前往后的顺序取出数据、和已经排好序的数据比较(从后向前比较)
- 3、如果取出的未排序数据小于拍好序的数据、则将拍好序的数据向后移动
- 4、找到当前的未排序数据在排序好数据中的插入位置、放入该数据
- 5、再次从未排序数据中取出下一个数据、重复2-5
图解过程
代码实现
package com.zheng.dao;
import java.util.Random;
//插入排序算法
public class TestInsertDemo {
/**
* 1、思想:将数据分为已经排序好的数据和未排序的数据。取出未排序中的数据、从后向前的形式找到其在已经排好序数据中的位置、然后插入该数据
*/
public int[] insertArr(int[] arr) {
int len = arr.length;
if (len < 0) { //数组长度为零、返回null
return null;
} else {
for (int i = 0; i < len - 1; i++) {
int current = arr[i + 1];//已经拍好序的下一个元素位置。(还未进行排序的第一个位置)
int index = i;
//然后将这个元素和之前拍好序的数组进行比较、将该数据放入合适的位置
while (index >= 0 && current < arr[index]) {//如果当前的数据比拍好序列的最后一个数据小
arr[index + 1] = arr[index];//将当前的数据向后移动一位
index--;
}
arr[index + 1] = current;//经过一轮的比较、找到放入新数据的位置
}
}
return arr;
}
//随机生成一个数组
public int[] randomArr(int len, int maxNum, int minNum) {
int[] arr = new int[len];//定义一个一维数组
Random random = new Random();
for (int i = 0; i < len; i++) {
arr[i] = random.nextInt(maxNum - minNum + 1) + minNum;
}
return arr;
}
//打印
private void Print(int[] arr) {
int len = arr.length;
System.out.print("【");
for (int i = 0; i < len; i++) {
if (i == len - 1) {
System.out.print(arr[i]);
} else {
System.out.print(arr[i] + "、");
}
}
System.out.println("】");
}
public static void main(String[] args) {
TestInsertDemo testInsertDemo = new TestInsertDemo();
int[] arr = testInsertDemo.randomArr(10, 100, 50);
System.out.print("生成的随机数组:");
testInsertDemo.Print(arr);
System.out.print("选择排序后数据:");
testInsertDemo.insertArr(arr);
testInsertDemo.Print(arr);
}
}
测试1:
测试2:
测试3: