前言
欢迎各位坚持不懈的小伙伴么继续来到我的博客,与我一起探讨程序员必备技能——数据结构与算法。在看这篇博客之前,要先去了解上一篇博客的核心思想的,才能明白优化之所在。
上一篇博客链接地址:数据结构与算法之插入排序_xue_mall的博客-CSDN博客
插入排序优化
上一篇中的核心插入排序代码:
/**
* 插入排序实现主逻辑
*
* @param arr 目标数组
*/
private static void insertSort(int[] arr) {
// 1、对边界值进行处理
if (arr == null || arr.length < 2) {
return;
}
for (int i = 1; i < arr.length; i++) {
int newNumIndex = i;
// 这里使用的是while循环,便于更加深刻的理解图解内容
while (newNumIndex - 1 >= 0 && arr[newNumIndex - 1] > arr[newNumIndex]){
swapArray(arr, newNumIndex - 1, newNumIndex);
newNumIndex--;
}
}
}
插入排序优化后的代码:
/**
* 插入排序实现主逻辑
*
* @param arr 目标数组
*/
private static void insertSort(int[] arr) {
// 1、对边界值进行处理
if (arr == null || arr.length < 2) {
return;
}
/**
* 第一层循环遍历的是,0-0位置有序,0-1位置有序 ... 0-n-1位置有序
* 第二次循环遍历的是,下标为1的数是否比下标为0的数大,以此类推
*/
for (int i = 1; i < arr.length; i++) {
// j 代表的是新数的前一个位置 i代表的是当前位置
for (int j = i - 1; j >= 0 && arr[j] > arr[j + 1]; j--) {
swapArray(arr, j, j + 1);
}
}
}
优化代码的核心思想:
- 使用两个for循环,第一个for循环和上一篇中的第一个for循环含义一样(代表的是保证位置有序)
- 第二个for循环的实现将代替原始的while循环。
- 第二个for循环的含义是:拿到当前位置的前一个位置的数据,条件是(前一个位置大于等于0并且前一个位置的数据大于当前位置的数据,做交换),然后进行减减操作。
总结
一定要理解其中的核心思想,万变不离其中,下一篇会继续更新一些基本的数据结构以及随机函数的使用,大家一起加油💪🏻!