“深入理解”—归并排序算法
来源:互联网 发布:铜牌在线制作软件 编辑:程序博客网 时间:2024/06/16 05:33
(尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/70994874冷血之心的博客)
“深入理解”—选择排序算法
“深入理解”—交换排序算法
“深入理解”—插入排序算法
归并排序:
归并排序 (merge sort) 是一类与插入排序、交换排序、选择排序不同的另一种排序方法。归并的含义是将两个或两个以上的有序表合并成一个新的有序表。
如图所示:
import java.util.Arrays;public class Test { // 归并排序的实现 public static void main(String[] args) { int[] nums = { 2, 7, 8, 3, 1, 6, 9, 0, 5, 4, -3}; System.out.println(Arrays.toString(nums)); sort(nums, 0, nums.length-1); System.out.println(Arrays.toString(nums)); } /** * 归并排序 * 简介:将两个(或两个以上)有序表合并成一个新的有序表 即把待排序序列分为若干个子序列, * 每个子序列是有序的。然后再把有序子序列合并为整体有序序列 * 时间复杂度为O(nlogn) * 稳定排序方式 * @param nums 待排序数组 * @return 输出有序数组 */ public static int[] sort(int[] nums, int low, int high){ int mid = (low+high)/2; if(low<high){ // 处理左边 sort(nums, low, mid); // 处理右边 sort(nums, mid+1, high); // 左右归并 merge(nums, low, mid, high); } return nums; } private static void merge(int[] nums, int low, int mid, int high) {// 定义一个辅助数组,所以该算法的空间复杂度为O(n) int[] temp = new int[high-low+1]; int i = low; int j = mid+1; int k = 0; // 找出较小值元素放入temp数组中 while(i<=mid && j<=high){ if(nums[i]<nums[j]) temp[k++] = nums[i++]; else temp[k++] = nums[j++]; } // 处理较长部分 while(i<=mid){ temp[k++] = nums[i++]; } while(j<=high){ temp[k++] = nums[j++]; } // 使用temp中的元素覆盖nums中元素 for (int k2 = 0; k2 < temp.length; k2++) {nums[k2+low] = temp[k2];}}}
算法分析
(1)稳定性
归并排序是一种稳定的排序。
(2)存储结构要求
可用顺序存储结构。也易于在链表上实现。
(3)时间复杂度
对长度为n的文件,需进行 趟二路归并,每趟归并的时间为O(n),故其时间复杂度无论是在最好情况下还是在最坏情况下均是O(nlgn)。
(4)空间复杂度
需要一个辅助向量来暂存两有序子文件归并的结果,故其辅助空间复杂度为O(n)
如果对你有帮助,记得点赞哦~欢迎大家关注我的博客,可以进群366533258一起交流学习哦~
2 0
- “深入理解”—归并排序算法
- 归并排序算法的理解
- 归并排序算法个人理解
- 深入理解排序算法
- 深入理解排序算法
- “深入理解”—插入排序算法
- “深入理解”—交换排序算法
- “深入理解”—选择排序算法
- “深入理解”—插入排序算法
- 排序算法—归并排序
- 排序算法—归并排序
- 我所理解的归并排序算法
- 算法排序 归并 理解性写
- 算法——归并排序
- 算法 —— 归并排序
- 算法——归并排序
- 算法——归并排序
- 算法——归并排序
- UI适配兼容性方案
- Spring MyBatis 学习笔记
- 注解 HIBERNATE 组合唯一键
- java创建数组有三种方式
- Eratosthenes(埃拉托色尼)筛法
- “深入理解”—归并排序算法
- JDBC关闭ResultSet、Connection的标准写法(仅供参考)
- 二分图之匈牙利算法
- Android Studio 出现错误 Could not find method android() for arguments .... 问题及解决
- 素数筛选
- Android跳转到你想要的Activity的一个好方法
- AC自动机 hdu2222
- SDK,Library,API,framework,Toolkits概念介绍
- 某种序列