当前位置:   article > 正文

归并排序java_归并排序左闭右开怎么写

归并排序左闭右开怎么写
  1. package mergesort;
  2. import java.util.Arrays;
  3. public class MergeSort {
  4. public static void mergesort(int[] data,int start,int end){
  5. //左闭右开固定写法
  6. /*
  7. * 如果写成这样:mergesort(data,mid,end)
  8. * 这样将导致递归后start的值发生变化,引发错误!
  9. * */
  10. if(start+1 == end){
  11. return;
  12. }
  13. int mid = (start+end)/2;//取中值
  14. mergesort(data,start,mid);//将数组分拆分为两部分
  15. mergesort(data,mid,end);
  16. int i = start;
  17. int j = mid;
  18. int k = 0;
  19. int[] temp = new int[end-start];//创建临时数组
  20. //将data数组赋值给临时数组temp排序
  21. while (i<mid && j<end){
  22. if(data[i]<=data[j]){
  23. temp[k++] = data[i++];
  24. }else{
  25. temp[k++] = data[j++];
  26. }
  27. }
  28. //处理当一侧数组已经赋值完毕但另一次没复制完毕情况;
  29. if(i< mid){
  30. while(i<mid){
  31. temp[k++] = data[i++];
  32. }
  33. }else {
  34. while(j<end){
  35. temp[k++] = data[j++];
  36. }
  37. }
  38. //将有序的temp数组赋值给data数组
  39. for(int l =0;l<end-start;l++){
  40. data[start+l]=temp[l];
  41. }
  42. System.out.println(Arrays.toString(data));
  43. }
  44. public static void main(String[] args) {
  45. int[] data = new int[]{2,5,4,9,7,4,5,1,3};
  46. System.out.print("排序前:");
  47. System.out.println(Arrays.toString(data));
  48. mergesort(data,0,data.length);
  49. System.out.print("排序后:");
  50. System.out.println(Arrays.toString(data));
  51. }
  52. }

推荐归并排序视频

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/67012
推荐阅读
相关标签
  

闽ICP备14008679号