归并排序
2017-08-08 19:45
99 查看
归并排序:
思想:归并排序(Merge)是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。
java代码具体实现
public class MergeSort { public static int[] sort(int[] nums,int low,int high){ int mid=(low+high)/2; if(low<high){ //左边 sort(nums,low,mid); //右边 sort(nums,mid+1,high); //左右归并 merge(nums,low,mid,high); } return nums; } public static void merge(int[] nums,int low ,int mid,int high){ int[] temp=new int[high-low+1]; int i=low;//左指针 int j=mid+1;//右指针 int k=0; //将较小的数移到新数组中 while(i<=mid && j<=high){ if(nums[i]<nums[j]){ temp[k++]=nums[i++]; }else{ temp[k++]=nums[j++]; } } //把左边剩余的数移到数组 while(i<=mid){ temp[k++]=nums[i++]; } //把右边剩余的数移到数组 while(j<=high){ temp[k++]=nums[j++]; } //把新数组中的数覆盖nums数组 for(int k2=0;k2<temp.length;k2++){ nums[k2+low]=temp[k2]; } } public static int[] getRandomArray(int len,int min,int max){ int[] array=new int[len]; for 4000 (int i=0;i<len;i++){ array[i]=(int)(Math.random()*(max-min+1)+min); } return array; } public static void main(String[] args) { int[] nums=getRandomArray(10000,0,100000); long time=System.nanoTime(); sort(nums,0,nums.length-1); System.out.println(System.nanoTime()-time); System.out.println(Arrays.toString(nums)); } }
相关文章推荐
- 分治算法---归并排序
- 排序算法(堆排序,归并排序,快排)
- ※归并排序(merge sort)
- 两种归并排序算法的实现:二路归并排序和基本归并排序(虚拟消除递归的二路归并排序)
- poj 2299 Ultra-QuickSort(归并排序)||(树状数组+离散化)
- 排序算法代码---归并排序
- 51nod:1019 逆序数(树状数组|归并排序|vector)
- c++ 模板实现 -- 直接插入排序和归并排序
- C++模板实现归并排序
- 归并排序
- 递归和非递归实现归并排序
- 数据结构之排序算法二:堆排序,快速排序,归并排序
- 内部排序算法4(归并排序)
- 归并排序(Merge sort)算法
- 归并排序
- 常用算法——归并排序
- 排序算法整理(C++):插入排序、交换排序、选择排序、归并排序
- 归并排序--基础的算法
- JavaScript算法 ,Python算法,Go算法,java算法,系列之【归并排序】篇
- 算法学习(10)-递归 之归并排序