归并排序-java
2015-10-05 18:37
591 查看
排序-归并排序
基本思想:是指将两个或两个以上的有序表合并成一个新的有序表。
具体步骤:
(1首先将整个表看成是n个有序子表,每个子表的长度为1。
(2)然后两两归并,得到n/2个长度为2的有序子表。
(3)然后再两两归并,直至得到一个长度为n的有序表为止。
平均时间:O(nlogn)
最好情况:O(nlogn)
最坏情况:O(n2)
辅助空间:O(n)
稳定性:稳定
适用场景:n比较大时
代码实现:
基本思想:是指将两个或两个以上的有序表合并成一个新的有序表。
具体步骤:
(1首先将整个表看成是n个有序子表,每个子表的长度为1。
(2)然后两两归并,得到n/2个长度为2的有序子表。
(3)然后再两两归并,直至得到一个长度为n的有序表为止。
平均时间:O(nlogn)
最好情况:O(nlogn)
最坏情况:O(n2)
辅助空间:O(n)
稳定性:稳定
适用场景:n比较大时
代码实现:
public static void mergeSort(int[] list) { mergeSort(list, 0, list.length - 1); } private static void mergeSort(int[] list, int left, int right) { if (left >= right) return; int center = (left + right) / 2; mergeSort(list, left, center); mergeSort(list, center + 1, right); merge(list, left, center, right); } private static void merge(int[] list, int left, int center, int right) { int[] tmpList = new int[list.length]; int mid = center + 1; int k = left; int tmp = left; while (left <= center && mid <= right) { if (list[left] <= list[mid]) tmpList[k++] = list[left++]; else { tmpList[k++] = list[mid++]; } } while (left <= center) { tmpList[k++] = list[left++]; } while (mid <= right) { tmpList[k++] = list[mid++]; } // 将临时数组中的数据保存至原数组中 while (tmp <= right) { list[tmp] = tmpList[tmp++]; } }
相关文章推荐
- kafka java示例
- Java多线程16:线程组
- 实现一个表达MP3的媒体类型,能和CD、DVD一样存放进Database里
- Zookeeper Api(java)入门与应用
- Spring框架模块
- java的窗口弹出和动手动脑
- 函数回调理解—Java方式
- 【总结】Java基础总结⑺
- 回顾spring(云计算项目)
- 【总结】Java基础总结⑹
- Java序列化的机制和原理
- Java Callable测试
- 【总结】Java基础总结⑸
- 【总结】Java基础总结⑷
- 【总结】Java基础总结⑶
- eclipse快速复制一行代码(向下/向上)快捷键冲突问题
- Spring容器中Bean的生命周期
- 利用VisualVM监测Azure云服务中的Java应用
- 阿里云 ubuntu jdk安装及java环境变量设置
- java中Map,List与Set的区别