排序算法之归并排序
来源:互联网 发布:如何文本安装linux 编辑:程序博客网 时间:2024/05/29 19:19
回到目录
1、基本思想
归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。
回到目录
2、代码示例
package sort;/** * 归并排序 */public class MergingSort { public void TestSort(){ int a[]={49,38,65,97,76,98,54,56,17,18,23,34,15,35,25,53,51}; sort(a,0,a.length-1); for(int i=0;i<a.length;i++){ System.out.print(a[i]+" "); } } public void sort(int[] arr, int left, int right) { if(left<right){ //找出中间索引 int center=(left+right)/2; //对左边数组进行递归 sort(arr,left,center); //对右边数组进行递归 sort(arr,center+1,right); //合并 merge(arr,left,center,right); } } public void merge(int[] arr, int left, int center, int right) { int [] tmpArr=new int[arr.length]; int mid=center+1; //third记录中间数组的索引 int third=left; int tmp=left; while(left<=center&&mid<=right){ //从两个数组中取出最小的放入中间数组 if(arr[left]<=arr[mid]){ tmpArr[third++]=arr[left++]; }else{ tmpArr[third++]=arr[mid++]; } } //剩余部分依次放入中间数组 while(mid<=right){ tmpArr[third++]=arr[mid++]; } while(left<=center){ tmpArr[third++]=arr[left++]; } //将中间数组中的内容复制回原数组 while(tmp<=right){ arr[tmp]=tmpArr[tmp++]; } } }
回到目录
3、效率分析
出处:http://hehaiyang.cnblogs.com/
本博客内容主要以学习、研究和分享为主,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。
0 0
- 排序算法之归并排序
- 排序算法之归并排序
- 排序算法之归并排序
- 排序算法之归并排序
- 排序算法之归并排序
- 排序算法之归并排序
- 排序算法之归并排序
- 排序算法之归并排序
- 排序算法之归并排序
- 排序算法之归并排序
- 排序算法之归并排序
- 排序算法之归并排序
- 排序算法之归并排序
- 排序算法之归并排序
- 排序算法之归并排序
- 排序算法之归并排序
- 排序算法之归并排序
- 排序算法之归并排序
- js基本知识比较系列四:动画
- Linux系统MySQL开启远程连接
- OC在C语言基础上新增的基本数据类型
- 嵌入式系统文件系统比较 jffs2, yaffs, cramfs, romfs, ramdisk, ramfs/tmpfs
- NSArray数组随机排序
- 排序算法之归并排序
- JVM学习总结
- zynq7000开发流程
- 揭开Wayland的面纱(一):X Window的前生今世
- C++内存存储区域:堆区栈区以及new delete
- Android屏幕适配终极手段
- leetcode-375 猜数游戏
- js修改form表单的action属性,commit提交后,再更改action属性。发现表单没有提交
- 快速Android开发系列网络篇之Retrofit