排序算法(三)-- 归并排序
来源:互联网 发布:手机淘宝旧版本6.6.0 编辑:程序博客网 时间:2024/06/01 22:50
归并排序
思想
把一个数组分成两半,排序每一半,然后把排好序的两半归并成一个有序的数组,那么如何为每一半排序呢?递归调用自身就行啦!
示例
关键代码
public static void sort(int[] array,int left,int right){if(left>=right){return;}int center=(right+left)/2;sort(array,left,center);sort(array,center+1,right);merge(array,left,center,right);}public static void merge(int[] array,int left,int center,int right){int[] temp = new int[array.length];int i=left,j=center+1;int k=left;while(i<=center&&j<=right){if(array[i]<array[j]){temp[k++]=array[i++];}else{temp[k++]=array[j++];}}//没有提前遍历完if(i==center+1){while(j<=right){temp[k++]=array[j++];}}if(j==right+1){while(i<=center){temp[k++]=array[i++];}}k=left;//让k指针从头开始while(k<=right){array[k]=temp[k];k++;}}
复杂度
归并排序和快速排序有那么点异曲同工之妙,快速排序:是先把数组粗略的排序成两个子数组,然后递归再粗略分两个子数组,直到子数组里面只有一个元素,那么就自然排好序了,可以总结为先排序再递归;归并排序:先什么都不管,把数组分为两个子数组,一直递归把数组划分为两个子数组,直到数组里只有一个元素,这时候才开始排序,让两个数组间排好序,依次按照递归的返回来把两个数组进行排好序,到最后就可以把整个数组排好序;该算法的最优时间复杂度和最差时间复杂度及平均时间复杂度都是一样的为:O( nlogn )。
0 0
- 排序算法(三):归并排序
- 排序算法(三)-- 归并排序
- 排序算法三归并排序
- 常见排序算法整理(三)----归并排序、快速排序
- 算法学习(三)----归并排序
- java排序算法三(归并排序算法)
- 【算法】排序算法(三)——归并排序
- 排序三(归并排序)
- 算法笔记三:归并排序
- 三大排序算法(快速排序,归并排序,堆排序)
- 三种排序算法(归并排序、快速排序,堆排序)
- 八大种必知排序算法(三) 归并排序算法、堆排序算法详解 (续)
- 八大种必知排序算法(三) 归并排序算法、堆排序算法详解
- 常见排序算法(三)(快速排序、归并排序、计数排序)
- 排序(三)---归并排序
- 排序算法-归并排序
- 排序算法------归并排序
- 排序算法-归并排序
- 欢迎使用CSDN-markdown编辑器
- JQJQJQJQdefferd详解
- hiho 1485 尺取法 [Offer收割]编程练习赛11 problem A hiho字符串
- Servlet_4th_service、doGet、doPost方法
- 算法排序总结
- 排序算法(三)-- 归并排序
- 微信自定义分享链接和图文
- Linux CentOS7 安装 配置 Redis 3.2.8
- Java8 时间类
- 如果是小写字符就输出对应的大写字符,如果接收的是大写字符,就输出对应的小写字符,如果是数字不输出。
- C语言心得_2
- 设计模式(一)--深入单例模式(涉及线程安全问题)
- 欢迎使用CSDN-markdown编辑器
- RabbitMQ(六)使用Dead Letter(死信队列)进行延时发送