当前位置:   article > 正文

《尚硅谷数据结构》-归并排序_归并排序尚硅谷

归并排序尚硅谷

目录

归并排序的概念

代码实现


归并排序的概念

归并排序是利用归并的思想实现的排序算法,该算法采用经典的分治(divide-and-conquer)策略。分治策略中的分,是指把问题分成一些小的问题,然后递归求解治是把分这个阶段得到的各个答案“修补”在一起

(需要构造一个temp数组,所以空间复杂度高)

 

代码实现

  1. import java.util.Arrays;
  2. public class MergeSort {
  3. public static void main(String[] args) {
  4. int arr[] = {8,4,5,7,1,3,6,2};
  5. int temp[] = new int[arr.length];
  6. mergeSort(arr,0,arr.length-1,temp);
  7. System.out.println("归并排序后="+ Arrays.toString(arr));
  8. }
  9. //分+合的方法
  10. public static void mergeSort(int[] arr, int left, int right, int[] temp){
  11. if (left < right){
  12. int mid =(left+right) / 2;
  13. //向左递归分解
  14. mergeSort(arr, left, mid, temp);
  15. //向右递归分解
  16. mergeSort(arr, mid+1, right, temp);
  17. //合并
  18. merge(arr,left,mid,right,temp);
  19. }
  20. }
  21. //合并的方法
  22. /**
  23. *
  24. * @param arr 排序的原始数组
  25. * @param left 左边有序序列的初始索引
  26. * @param mid 中间索引
  27. * @param right 右边索引
  28. * @param temp 做中转的数组
  29. */
  30. public static void merge(int[] arr, int left, int mid, int right, int[] temp){
  31. int i = left; //左边有序序列的初始索引
  32. int j = mid + 1; //右边有序序列的初始索引
  33. int t = 0; //指向temp数组的当前索引
  34. //先把左右两边(有序)的数据按照规则填充到temp数组
  35. //直到左右两边的有序序列,有一边处理完毕
  36. while(i<=mid && j<=right){
  37. if(arr[i] <= arr[j]){
  38. temp[t] = arr[i];
  39. t += 1;
  40. i += 1;
  41. }else{
  42. temp[t++] = arr[j++];
  43. }
  44. }
  45. //把有剩余数据的一边的数据依次全部填充到temp
  46. while( i <= mid){ //左边还有剩余的情况
  47. temp[t++] = arr[i++];
  48. }
  49. while(j <= right){ //右边还有剩余的情况
  50. temp[t++] = arr[j++];
  51. }
  52. //将temp数组的元素全部拷贝到arr
  53. //注意,只有最后一次才是拷贝所有
  54. t = 0 ;
  55. int templeft = left;
  56. System.out.println("templeft="+templeft+" right="+right);
  57. while(templeft <= right){
  58. arr[templeft] = temp[t];
  59. t +=1;
  60. templeft +=1;
  61. }
  62. }
  63. }

运行结果:

 

 

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

闽ICP备14008679号