归并排序
归并排序
归并排序分成:分,并两大步骤,使用的分治的思想。
和选择排序一样,归并排序的性能不受输入数据的影响,但表现比选择排序好的多,因为始终都是O(n log n)的时间复杂度。代价是需要额外的内存空间。
伪代码
分割
分割需要用到递归。
public static int[] sort(int[] arr,int start,int end){
//递归函数出口
//计算分割线,可以根据
//划分
}
合并
合并两个相邻的数组
public static int[] merge(int[] left,int[] right){
//new一个数组对象result,用于保存合并后的结果
//两数组互相进行对比,把小的放到result
//把剩下的,放到result
}
java代码实现
public static int[] sort(int[] arr,int start,int end){
//递归出口
if (end-start<=0) return Arrays.copyOfRange(arr,start,end+1);
//分割线
int mid = (end+start) /2;
//左右分割,然后将分割的丢进去合并函数中
return merge(sort(arr,start,mid),sort(arr,mid+1,end));
}
public static int[] merge(int[] left,int[] right){
int i=0,j=0,k=0;
//保存结果是数组
int[] result = new int[left.length+right.length];
//两两对比
while (i<left.length && j<right.length) {
if (left[i] <= right[j]) result[k++] = left[i++];
else result[k++] = right[j++];
}
//剩下也放过去
while (i<left.length) result[k++] = left[i++];
while (j<right.length) result[k++] = right[j++];
return result;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)