归并排序(Merge Sort)
2016-10-20 02:47
295 查看
/** * 4. 归并排序: 归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表, * 即把待排序序列分为若干个子序列,每个子序列是有序的,然后再把有序子序列合并为整体有序序列. * * 步骤: * (1)用除二来划分数组,对最小单位为二的数组排序 * (2)合并两个数组并排序,具体方法为: * 在两个数组中每次找最小的放到临时空间中 * * EX: int[] nums={8,1,4,2,23,10}; < * * [8,1] [4] [2,23] [10] * [1,8] [4] [2,23] [10] * * [1,8,4] [2,23,10] * [1,4,8] [2,10,23] * * [1,4,8,2,10,23] * [1,2,4,8,10,23] * * 归并排序是稳定的排序方法. * 归并排序的时间复杂度为O(nlogn). * 速度仅次于快速排序,一般用于对总体无序,但是各子项相对有序的数列. * */ public static void mergeSort(int[] nums,int head,int tail) { if(head>=tail) return ; int mid=(head+tail)/2; mergeSort(nums, head, mid); mergeSort(nums, mid+1, tail); int[] temp = new int[tail-head+1]; int count=0; int left = head; int right = mid+1; while(left<=mid && right<=tail){ if(nums[left]<=nums[right]){ temp[count++]=nums[left++]; }else{ temp[count++]=nums[right++]; } } while(left<=mid){ temp[count++] = nums[left++]; } while(right<=tail){ temp[count++] = nums[right++]; } count=0; while(head<=tail){ nums[head++] = temp[count++]; } }
相关文章推荐
- 归并排序(MergeSort)
- 归并排序(merge sort)源码
- 归并排序(merge sort)c++实现
- 无聊写排序之 ---- 归并排序(MergeSort) 递归实现
- 归并排序(Mergesort)之Java实现
- 归并排序(Mergesort)之Java实现
- 归并排序(merge sort)算法实现
- 排序算法详解【归并排序-Merge_Sort】
- 面试之路(16)-归并排序详解(MergeSort)递归和非递归实现
- In-place Merge Sort (原地归并排序)
- 归并排序(Merge sort)
- Java实现算法归并排序(MergeSort)
- 归并排序(merge sort)
- 【每日一题(28)】高等排序算法(2) 归并排序(MergeSort)
- 使用C#详解常用排序算法(三):归并排序(Merge Sort)
- 归并排序(merge sort)
- 《算法导论》归并排序----merge-sort
- 链表的归并排序 特殊优化, merge sort for list,非快慢指针法
- 分治法——归并排序(MergeSort)
- 归并排序(merge sort)——数据结构与算法复习