07_程序员必须掌握的8大排序算法_并归排序
来源:互联网 发布:js对象数组按属性排序 编辑:程序博客网 时间:2024/05/21 05:08
并归排序
基本思想
归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。
实例
用Java实现
import java.util.Arrays; public class mergingSort { int a[]={49,38,65,97,76,13,27,49,78,34,12,64,5,4,62,99,98,54,56,17,18,23,34,15,35,25,53,51}; public mergingSort(){ sort(a,0,a.length-1); for(int i=0;i<a.length;i++){ System.out.println(a[i]); } } public void sort(int[] data, int left, int right) { if(left<right){ //找出中间索引 int center=(left+right)/2; //对左边数组进行递归 sort(data,left,center); //对右边数组进行递归 sort(data,center+1,right); //合并 merge(data,left,center,right); } } public void merge(int[] data, int left, int center, int right) { int [] tmpArr=new int[data.length]; int mid=center+1; //third记录中间数组的索引 int third=left; int tmp=left; while(left<=center&&mid<=right){ //从两个数组中取出最小的放入中间数组 if(data[left]<=data[mid]){ tmpArr[third++]=data[left++]; }else{ tmpArr[third++]=data[mid++]; } } //剩余部分依次放入中间数组 while(mid<=right){ tmpArr[third++]=data[mid++]; } while(left<=center){ tmpArr[third++]=data[left++]; } //将中间数组中的内容复制回原数组 while(tmp<=right){ data[tmp]=tmpArr[tmp++]; } System.out.println(Arrays.toString(data)); } }
阅读全文
0 0
- 07_程序员必须掌握的8大排序算法_并归排序
- 01_程序员必须掌握的8大排序算法_直接插入排序
- 02_程序员必须掌握的8大排序算法_希尔排序
- 03_程序员必须掌握的8大排序算法_简单选择排序
- 04_程序员必须掌握的8大排序算法_堆排序
- 05_程序员必须掌握的8大排序算法_冒泡排序
- 06_程序员必须掌握的8大排序算法_快速排序
- 08_程序员必须掌握的8大排序算法_基数排序
- Java程序员必须掌握的8大排序算法
- Java程序员必须掌握的8大排序算法
- Java程序员必须掌握的8大排序算法
- Java程序员必须掌握的8大排序算法
- Java程序员必须掌握的8大排序算法
- Java程序员必须掌握的8大排序算法
- Java程序员必须掌握的8大排序算法
- Java程序员必须掌握的8大排序算法
- Java程序员必须掌握的8大排序算法
- Java程序员必须掌握的8大排序算法
- jmeter之java请求二次开发
- dll隐式调用,应用程序无法正常启动问题
- 第三章 授权——跟我学习springmvc mybatis
- CS:APP二进制炸弹phase3
- Android中BitmapFactory.Options详解
- 07_程序员必须掌握的8大排序算法_并归排序
- Nginx配置文件详解
- Oracle表与索引的分析及索引重建
- 【计算机视觉学习笔记--双目视觉几何框架系列】
- 运行jar应用程序引用其他jar包的四种方法
- Java 子类继承父类方法的重写(或者覆盖,override)
- H5写的时钟
- 08_程序员必须掌握的8大排序算法_基数排序
- 产品经理如何绕开API的坑?