排序3-插入排序
排序3-插入排序
插入排序把排序对象分成已排序和未排序两个部分, 每次选取未排序部分的首元素, 将它插入已排序部分的合适部分
插入排序(正序)
//插入排序 void insertSort(int arr[], int length){ int j; for(int i=1; i<length; i++){ // i是无序部分首元素的下标 if(arr[i]<arr[i-1]){ //如果无序部分的首元素小于有序部分的最大值, 进入排序, 否则跳过本次循环 int tmp = arr[i]; //tmp存储无序部分的首元素 for(j=i-1; j>=0 && tmp<arr[j]; j--){ // j指向i之前的元素, 如果arr[j]<tmp或j<0, 循环结束 arr[j+1] = arr[j]; //如果tmp < arr[j], 将arr[j]元素前移至arr[j+1]位置 } arr[j+1] = tmp; //将tmp赋值给arr[j+1] } } }
当元素序列基本有序, 元素个数较少的时候, 效率最高
最优情况: 当排序内容本身都是顺序(相对于要求的排序方式来说)的, 则只需要遍历一次内容,就可完成排序, 此时时间复杂度是 O(n).
最差情况: 如果排序内容本身都是逆序的, 时间复杂度为 O(n^2), 但相对于选择排序与冒泡效率, 插入排序的效率还是更高.
同样排序内容中, n=10000时, 插入排序与选择排序, 冒泡排序的耗时比较(单位: ms)
插入排序示意
以此类推
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话