又花了点时间看看算法,这次看的是归并。
感觉归并的效率比插入排序高多了!
代码给上
package oliver.algorithm.sort; public class MergeSort { public static void sort(int[] arr,int first,int last) { int mid=0; if(first<last) { mid=(first+last)/2; sort(arr,first,mid); sort(arr,mid+1,last); merge(arr,first,mid,last); } } private static void merge(int [] arr,int p,int q,int r) { int begin1,end1,begin2,end2; begin1=p;end1=q; begin2=q+1;end2=r; int []temp=new int[r-p+1]; int i=0; while((begin1<=end1)&&(begin2<=end2)) { if(arr[begin1]<arr[begin2]) { temp[i]=arr[begin1]; begin1++; } else { temp[i]=arr[begin2]; begin2++; } i++; } while(begin1<=end1) { temp[i++]=arr[begin1++]; } while(begin2<=end2) { temp[i++]=arr[begin2++]; } for(i=0;i<=(r-p);i++) { arr[p+i]=temp[i]; } } }
测试代码
package oliver.algorithm.sort; import java.util.Date; public class MergeSortTest { /** * @param args */ public static void main(String[] args) { int size=100000; int [] arr=new int[size]; for(int i=0;i<size;i++) { arr[i]=size-i; } Long beginTime=new Date().getTime(); MergeSort.sort(arr,0,size-1); Long endTime=new Date().getTime(); for(int a:arr) { System.out.print(a+" "); } System.out.println(); System.out.println("when n = "+size+" toke "+(endTime-beginTime)+"ms"); } }
相关推荐
C语言算法之归并排序C语言算法之归并排序C语言算法之归并排序C语言算法之归并排序
最快的排序算法 谁才是最强的排序算法:快速排序-归并排序-堆排序,排序算法数据结构
C++排序算法之归并排序源码
排序算法演示:插入排序、选择排序、冒泡排序、希尔排序、归并排序、快速排序
排序算法_插入排序,快排,归并排序【数据结构和算法入门3】
排序算法java版,速度排行:冒泡排序、简单选择排序、直接插入排序、折半插入排序、希尔排序、堆排序、归并排序、快速排序.mht
算法设计实验报告,包括:快速排序和归并排序两种算法各自的基本思想、时间复杂度分析,C++实现代码,两种算法运行时间的比较,运行截图,实验心得。
JAVA排序算法: 直接插入,希尔排序,选择排序,堆排序,冒泡排序,快速排序,归并排序,包括算法的详细介绍,以及对几种算法的详细测试
归并排序 在排序前,先建好一个长度等于原数组长度的临时数组
实验目的:掌握使用分治策略消除递归;基本掌握分治策略的原理方法。 实验原理: 分治策略 实验步骤:利用分治策略...合并的含义就是将两个或两个以上的有序数据序列合并成一个新的有序数据序列,因此它又叫归并算法。
本人自己写的一些排序算法,这是系列1归并排序算法实现,
易语言归并排序算法源码,归并排序算法,归并排序,子程序_有序数组合并
根据算法导论实现的归并排序算法
所需辅助空间最多:归并排序 所需辅助空间最少:堆排序 平均速度最快:快速排序 当n较大,则应采用时间复杂度为O(nlogn)的排序方法:快速排序、堆排序或归并排序。 时间复杂度:冒泡排序=选择排序=插入排序=O(N的...
实现以下常用的内部排序算法并进行性能比较:"直接插入排序"," 折半插入排序"," 2—路插入排序"," 表插入排序"," 希尔排序"," 起泡排序"," 快速排序"," 简单选择排序"," 树形选择排序"," 堆排序"," 归并排序"," 链式...
算法设计,给出归并排序的C++实现代码,并利用给随机数方式求运行时间
C语言二路归并排序算法, 写了个二路归并的归并排序小代码,直接贴上来
自动生成500个随机数,然后对这500个随机数进行归并排序
高级排序算法: 归并排序、快排 树,二叉树 堆与堆排序 优先级队列 二叉查找树 图与图的遍历 python 内置常用数据结构和算法的使用。list, dict, set, collections 模块,heapq 模块 面试笔试常考算法
%mergesort 分治算法——归并排序 %divide——将数组一分为二 %conquer——对两部分数组分别排序 %combine——将各自排好序的数组融合 %以此类推递归调用