思路:
//
//int[] array = {-2,-5,11,-9,8};
//假设要对数组从小到大排序
// //思路:如果无序部分的第一个元素array[i],比对有序部分最后一个元素array[i-1],
// //若array[i]>array[i-1]则不作变化,从小到大顺序一致
// //若array[i]<array[i-1],则array[i-1]向后挪动一个位置,与array[i-2]比较。。。以此类推直到比对到比它array[i]小的元素为止,当然不能突破前置边界
// //定义要比对的元素及下标,i>=1
// int coppeteiveIndex = i-1;
// int coppeteiveValue = array[i];
// while(array[i] < array[coppeteiveIndex] && coppeteiveIndex >-1){
// //若array[i]<array[i-1],则array[i-1]向后挪动一个位置
// array[coppeteiveIndex+1] = array[coppeteiveIndex];
// //比对前一个元素
// coppeteiveIndex--;
// }
// //跳出时,要么是找到了比array[i]小的元素,要么是比对完了发现自己最小
// //1、此时array[i]> array[coppeteiveIndex],则array[coppeteiveIndex+1] = array[i]
// //若比到队首还没找到比array[i]小的,此时coppeteiveIndex==-1;array[coppeteiveIndex+1]即为array[0],array[i]排到队首也满足
// //array[coppeteiveIndex+1] = array[i]
// array[coppeteiveIndex+1] = array[i];
//然后取无序部分第二个元素插入。。。
public static void main(String[] args) {
//插入算法
//思路:以数组第一个元素作为有序部分,其他元素为无序部分
//将第二个元素插入到有序部分,将第三个元素插入到有序部分。。。将第n个元素插入到有序部分
int[] array = {-2,-5,11,-9,8};
System.out.println("排序前");
System.out.println(Arrays.toString(array));
for (int i = 1; i <array.length ; i++) {
int coppeteiveIndex = i-1;
int coppeteiveValue = array[i];
//coppeteiveIndex >-1这个条件要在前,不然后面array[coppeteiveIndex]可能为array[-1]
while(coppeteiveIndex >-1 && coppeteiveValue < array[coppeteiveIndex] ){
//若array[i]<array[i-1],则array[i-1]向后挪动一个位置
array[coppeteiveIndex+1] = array[coppeteiveIndex];
//比对前一个元素
coppeteiveIndex--;
}
array[coppeteiveIndex+1] = coppeteiveValue;
System.out.println("第"+i+"遍遍历完");
System.out.println(Arrays.toString(array));
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?