[算法笔记]插入排序 Insertion-Sort
插入排序是把待排序数据(从第二个元素开始)插入到已经排序好的数列中。
基本方法:
从第二个数开始(第一个数不用排序,直接作为基准比较元素),建立锚点,每一步将一个待排序(从第二个数开始),按其大小循环与前面已排好序的进行比较,插入到前面已经排好序的适当位置上去,直到最后一个元素全部插入为止,从小到大排序。
def InsertionSort(arr): for i in range(1,len(arr)): # 从第2个元素开始,依次作为待排序元素 print('第'+ str(i) + '次排序开始时:',arr) if arr[i] < arr[i-1]: # 小于前一元素,就等待插入到前面的位置 temp = arr[i] for j in range(i,-1,-1): # 前面的元素大于待排序元素,就大数往后移动一位 if arr[j-1] > temp and j > 0: arr[j] = arr[j-1] print('第'+ str(i) + '次排序,第'+ str(j+1) + '位元素移动结束时:',arr) else: arr[j] = temp # 前面不存在更大数或者已经到第一位数,插入待排序元素 print('第'+ str(i) + '次排序,第'+ str(j+1) + '位元素移动结束时:',arr) break return arr a = [2,8,4,6,1,9,7,5,0,3] print('插入排序结果为:',InsertionSort(a))
====================== RESTART: test.py ====================== 第1次排序开始时: [2, 8, 4, 6, 1, 9, 7, 5, 0, 3] 第2次排序开始时: [2, 8, 4, 6, 1, 9, 7, 5, 0, 3] 第2次排序,第3位元素移动结束时: [2, 8, 8, 6, 1, 9, 7, 5, 0, 3] 第2次排序,第2位元素移动结束时: [2, 4, 8, 6, 1, 9, 7, 5, 0, 3] 第3次排序开始时: [2, 4, 8, 6, 1, 9, 7, 5, 0, 3] 第3次排序,第4位元素移动结束时: [2, 4, 8, 8, 1, 9, 7, 5, 0, 3] 第3次排序,第3位元素移动结束时: [2, 4, 6, 8, 1, 9, 7, 5, 0, 3] 第4次排序开始时: [2, 4, 6, 8, 1, 9, 7, 5, 0, 3] 第4次排序,第5位元素移动结束时: [2, 4, 6, 8, 8, 9, 7, 5, 0, 3] 第4次排序,第4位元素移动结束时: [2, 4, 6, 6, 8, 9, 7, 5, 0, 3] 第4次排序,第3位元素移动结束时: [2, 4, 4, 6, 8, 9, 7, 5, 0, 3] 第4次排序,第2位元素移动结束时: [2, 2, 4, 6, 8, 9, 7, 5, 0, 3] 第4次排序,第1位元素移动结束时: [1, 2, 4, 6, 8, 9, 7, 5, 0, 3] 第5次排序开始时: [1, 2, 4, 6, 8, 9, 7, 5, 0, 3] 第6次排序开始时: [1, 2, 4, 6, 8, 9, 7, 5, 0, 3] 第6次排序,第7位元素移动结束时: [1, 2, 4, 6, 8, 9, 9, 5, 0, 3] 第6次排序,第6位元素移动结束时: [1, 2, 4, 6, 8, 8, 9, 5, 0, 3] 第6次排序,第5位元素移动结束时: [1, 2, 4, 6, 7, 8, 9, 5, 0, 3] 第7次排序开始时: [1, 2, 4, 6, 7, 8, 9, 5, 0, 3] 第7次排序,第8位元素移动结束时: [1, 2, 4, 6, 7, 8, 9, 9, 0, 3] 第7次排序,第7位元素移动结束时: [1, 2, 4, 6, 7, 8, 8, 9, 0, 3] 第7次排序,第6位元素移动结束时: [1, 2, 4, 6, 7, 7, 8, 9, 0, 3] 第7次排序,第5位元素移动结束时: [1, 2, 4, 6, 6, 7, 8, 9, 0, 3] 第7次排序,第4位元素移动结束时: [1, 2, 4, 5, 6, 7, 8, 9, 0, 3] 第8次排序开始时: [1, 2, 4, 5, 6, 7, 8, 9, 0, 3] 第8次排序,第9位元素移动结束时: [1, 2, 4, 5, 6, 7, 8, 9, 9, 3] 第8次排序,第8位元素移动结束时: [1, 2, 4, 5, 6, 7, 8, 8, 9, 3] 第8次排序,第7位元素移动结束时: [1, 2, 4, 5, 6, 7, 7, 8, 9, 3] 第8次排序,第6位元素移动结束时: [1, 2, 4, 5, 6, 6, 7, 8, 9, 3] 第8次排序,第5位元素移动结束时: [1, 2, 4, 5, 5, 6, 7, 8, 9, 3] 第8次排序,第4位元素移动结束时: [1, 2, 4, 4, 5, 6, 7, 8, 9, 3] 第8次排序,第3位元素移动结束时: [1, 2, 2, 4, 5, 6, 7, 8, 9, 3] 第8次排序,第2位元素移动结束时: [1, 1, 2, 4, 5, 6, 7, 8, 9, 3] 第8次排序,第1位元素移动结束时: [0, 1, 2, 4, 5, 6, 7, 8, 9, 3] 第9次排序开始时: [0, 1, 2, 4, 5, 6, 7, 8, 9, 3] 第9次排序,第10位元素移动结束时: [0, 1, 2, 4, 5, 6, 7, 8, 9, 9] 第9次排序,第9位元素移动结束时: [0, 1, 2, 4, 5, 6, 7, 8, 8, 9] 第9次排序,第8位元素移动结束时: [0, 1, 2, 4, 5, 6, 7, 7, 8, 9] 第9次排序,第7位元素移动结束时: [0, 1, 2, 4, 5, 6, 6, 7, 8, 9] 第9次排序,第6位元素移动结束时: [0, 1, 2, 4, 5, 5, 6, 7, 8, 9] 第9次排序,第5位元素移动结束时: [0, 1, 2, 4, 4, 5, 6, 7, 8, 9] 第9次排序,第4位元素移动结束时: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 插入排序结果为: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构