归并排序
归并排序是可以被实际使用的排序算法,其复杂度为O(nlogn)。
思路:归并排序是一种分治算法。其思想是将原始数组切分为较小的数组,知道每个小数组只有一个位置。接着将小数组归并为较大的数组,直到最后只有一个排序完毕的大数组。
由于是分治法,归并排序也是递归的;我们首先定义一个实际被执行的辅助函数。
// 该函数是将一个数组切分为两个数组 function mergeSort(array){ var length = array.length; // 当length为1时,说明已经切割为最小数据,递归的结束条件 if(length == 1){ return array; } var mid = Math.floor(length / 2), left = array.slice(0,mid), right = array.slice(mid,length);
// merge函数,负责将分割的小数组合并
return merge(mergeSort(left), mergeSort(right)) }
function merge(left, right){ var result = [], il = 0, ir = 0; // 这里的left 和 right 分被是两个已经排过序的数组 // 选择两个数组中最小的依次放入结果中,直到一个数组的值完全放进结果集中 // 直到其中的一个数组全部放到结果集中,结束循环 while(il < left.length && ir < right.length){ if(left[il] < right[ir]){ result.push(left[il++]) }else{ result.push(right[ir++]) } } //将还没有完全放进去的那个数组,依次放入结果集,因为每个数组一定是已经排好序的 // 这里的left 与 right 不分先后 因为到这里肯定有一个数组为空, while(il < left.length){ result.push(left[il++]) } while(ir < right.length){ result.push(right[ir++]) } return result; }
主要流程:
算法首先将原始数组分割直至只有一个元素的子数组,然后开始归并。归并过程也会完成排序,直至原始数组完全合并并完成排序。
图示:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!