插入排序
直接插入排序
基本思想:每一步将一个待排序的数据插入到前面已经排好序的有序序列中,直到插完所有元素为止。
算法实现:直接插入排序是将无序序列中的数据插入到有序的序列中,在遍历无序序列时,首先拿无序序列中的首元素去与有序序列中的每一个元素比较并插入到合适的位置,一直到无序序列中的所有元素插完为止。对于一个无序序列arr{4,6,8,5,9}来说,我们首先先确定首元素4是有序的,然后在无序序列中向右遍历,6大于4则它插入到4的后面,再继续遍历到8,8大于6则插入到6的后面,这样继续直到得到有序序列{4,5,6,8,9}。
//假设前面有序,不管后面 将每一个数 插入到前面合适的位置 public class InsertSort { public static void main(String[] args) { int arr[] = {101,34,119,1}; insertSort(arr); //第一轮 {101,34,119,1} ->{34,101,119,1} //第一轮 {101,34,119,1} ->{34,101,119,1} } public static void insertSort(int arr[]){ for (int i = 1; i < arr.length; i++) { int insertVal = arr[i]; //要插入的数的值 int insertIndex = i-1; //要插入的前一个数的下标 //给insertVal 找到位置 //insertIndex >= 0 :保证在给insertVal 找插入位置 不越界 while (insertIndex >= 0 && insertVal < arr[insertIndex]){ arr[insertIndex+1] = arr[insertIndex]; insertIndex--; } //当退出while循环时,说明插入的位置找到 insertIndex +1 //当不是有序的时候才换 if (insertIndex+1!=i) { arr[insertIndex + 1] = insertVal; } System.out.println("第"+i+"轮插入"); System.out.println(Arrays.toString(arr)); } } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律