基本原理
插入算法从名字就能理解,可以用玩扑克牌理牌来比喻
1. 当摸完牌之后,根据牌的大小进行排序,比如 3,5,7,8,9,4,需要将 4 插入到 3 的后面
2. 此时 4 的下标应该改为 index = 1,而从 5 开始的元素就要集体往后移一位
3. 所以可以这样:用 4 和前一个元素进行比较,如果比它小,就和他交换,再次和前一位元素比较,如果比他小就再交换,直到 4 比前一个元素比它大时
举例
1. 原始数据
2. 首先比较 9 和 7,7比9小,所以将 7 和 9 交换
3. 再比较 8 和 9 ,8 比 9 小,所以交换,8 再和 7 比较,8 比 7 大,所以不做交换,进行下一次循环
4. 以此类推,用 2 和前面的元素作比较
5. 再经过两次循环就能将序列排序完成
代码实现
/**
* 插入排序
*/
public class test {
public static void main(String[] args) {
int[] nums = {6, 7, 1, 1, 3};
//选择排序
for (int i = 1; i < nums.length; i++) {
//从后向前找位置,所以 j--
for(int j = i ; j>0 ; j--){
//找到直接结束本次循环
if(nums[j] >= nums[j-1] ){
break;
}
//没找到就每次都和前一位做交换
swap(nums,j,j-1);
}
}
System.out.println(Arrays.toString(nums));
}
//元素交换方法
public static void swap(int[] nums, int a, int b) {
int swap = nums[a];
nums[a] = nums[b];
nums[b] = swap;
}
}
如有错误,烦请指出。