【常用排序算法】归并排序(Java实现)
2017-11-17 12:52
471 查看
递归算法实现:
非递归实现:
非递归实现其实就参考递归算法中,递归至最底层时过程的模拟。
外层for循环 i=1时 ,其实就是 [1][2] [3][4] [5][6] [7][8] 进行比较合并
外层for循环 i=2时 ,其实就是 [1,2] [3,4] [5,6] [7,8] 进行比较合并
………
如果您有更好的解法,欢迎您在留言区补充,感谢!!
public static void mergeSort(int[] A,int left,int right) { if(left==right) return; int mid=(left+right)/2; mergeSort(A,left,mid); mergeSort(A,mid+1,right); merge(A,left,mid,right); } public static void merge(int[] A,int left, int mid,int right ){ int[] temp=new int[right-left+1]; int index=0; int midNext=mid+1; while(left<=mid&&midNext<=right){ if(A[left]>A[midNext]){ temp[index++]=A[midNext++]; }else{ temp[index++]=A[left++]; } } while(left<=mid){ temp[index++]=A[left++]; } while(midNext<=right){ temp[index++]=A[midNext++]; } for(int i=temp.length-1;i>=0;){ A[right--]=temp[i--]; } }
非递归实现:
public static void mergeSort(int[] A) { int length=A.length; int left,mid,right; for(int i=1;i<length;i=i*2){ left=0; while(left+i<length){ mid=left+i-1; right=mid+i<length?mid+i:length-1; merge(A,left,mid,right); left=right+1; } } } //merge()同上
非递归实现其实就参考递归算法中,递归至最底层时过程的模拟。
外层for循环 i=1时 ,其实就是 [1][2] [3][4] [5][6] [7][8] 进行比较合并
外层for循环 i=2时 ,其实就是 [1,2] [3,4] [5,6] [7,8] 进行比较合并
………
right=mid+i<length?mid+i:length-1;这段是防止超出数组最大序列
如果您有更好的解法,欢迎您在留言区补充,感谢!!
相关文章推荐
- 几种常用的排序算法的分析及java实现(希尔排序,堆排序,归并排序,快速排序,选择排序,插入排序,冒泡排序)
- 元素排序几种常用的排序算法的分析及java实现(希尔排序,堆排序,归并排序,快速排序,选择排序,插入排序,冒泡排序)
- 几种常用的排序算法的分析及java实现(希尔排序,堆排序,归并排序,快速排序,选择排序,插入排序,冒泡排序)
- 用Java实现几种常用的排序算法
- java 实现常用排序算法
- 【转】排序算法复习(Java实现)(二): 归并排序,堆排序,桶式排序,基数排序
- 常用的各种排序算法的JAVA实现
- Java实现的常用排序算法及对比
- 排序算法(Java实现):Shell排序和归并排序
- Java实现的几个常用排序算法详细解读
- 排序算法复习(Java实现)(二): 归并排序,堆排序,桶式排序,基数排序
- Java实现的几个常用排序算法详细解读
- 常用的各种排序算法的JAVA实现
- java实现的几个常用排序算法
- Java 常用排序算法实现--快速排序、插入排序、选择、冒泡
- 排序算法复习(Java实现)(二): 归并排序,堆排序,桶式排序,基数排序
- 常用的各种排序算法的JAVA实现
- 排序算法复习(Java实现)(二): 归并排序,堆排序,桶式排序,基数排序
- 用Java实现几种常用排序算法(先实现一个org.rut.util.algorithm.SortUtil)
- 常用的各种排序算法的JAVA实现