归并排序(Merge Sort)
来源:互联网 发布:软件出售 编辑:程序博客网 时间:2024/06/06 18:26
/** * 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++]; } }
0 0
- 归并排序(merge sort)
- 归并排序(Merge sort)
- 归并排序Merge-Sort
- 归并排序(Merge Sort)
- 归并排序(Merge Sort)
- 归并排序(Merge Sort)
- 归并排序(Merge Sort)
- 归并排序Merge sort
- 归并排序 (Merge Sort)
- 归并排序(Merge Sort)
- 归并排序 Merge sort
- merge sort归并排序
- 归并排序 merge sort
- 归并排序 Merge sort
- 归并排序 merge sort
- Merge Sort归并排序
- merge sort(归并排序)
- 归并排序(merge Sort)
- CodeForces 560D Equivalent Strings【递归+贪心】
- 学习Cocos的第一步,认识Cocos中的Ref类
- Linux下udev和mdev详解
- 二分法插入排序(Binary Sort)
- 希尔排序(Shell Sort)
- 归并排序(Merge Sort)
- 杭电oj编码2003
- c++函数的几种关系
- 杭电oj编码2002
- 基数排序(Radix)
- 杭电oj编码2001
- 用window.name来解决不同网页间的数据通信
- 杭电oj编码2000
- 工具函数之取数组的topN和bottomN