当前位置:   article > 正文

归并排序(Java代码实现)_归并排序java

归并排序java

归并排序

归并排序采用的是分治(divide-and-conquer)法思想。

(1)基本思想:将待排序元素分成大小大致相同的2个子集合,分别对2个子集合进行排序,最终将排好序的子集合合并成为所要求的排好序的集合。

(2)执行过程:


(3)算法思路:


(4)Java代码实现如下:

  1. public class Main {
  2. public static void main(String[] args) {
  3. int[] arr = {11,44,23,67,88,65,34,48,9,12};
  4. int[] tmp = new int[arr.length]; //新建一个临时数组存放
  5. mergeSort(arr,0,arr.length-1,tmp);
  6. for(int i=0;i<arr.length;i++){
  7. System.out.print(arr[i]+" ");
  8. }
  9. }
  10. public static void merge(int[] arr,int low,int mid,int high,int[] tmp){
  11. int i = 0;
  12. int j = low,k = mid+1; //左边序列和右边序列起始索引
  13. while(j <= mid && k <= high){
  14. if(arr[j] < arr[k]){
  15. tmp[i++] = arr[j++];
  16. }else{
  17. tmp[i++] = arr[k++];
  18. }
  19. }
  20. //若左边序列还有剩余,则将其全部拷贝进tmp[]中
  21. while(j <= mid){
  22. tmp[i++] = arr[j++];
  23. }
  24. while(k <= high){
  25. tmp[i++] = arr[k++];
  26. }
  27. for(int t=0;t<i;t++){
  28. arr[low+t] = tmp[t];
  29. }
  30. }
  31. public static void mergeSort(int[] arr,int low,int high,int[] tmp){
  32. if(low<high){
  33. int mid = (low+high)/2;
  34. mergeSort(arr,low,mid,tmp); //对左边序列进行归并排序
  35. mergeSort(arr,mid+1,high,tmp); //对右边序列进行归并排序
  36. merge(arr,low,mid,high,tmp); //合并两个有序序列
  37. }
  38. }
  39. }
(5)运行结果如下:

(6)复杂度分析:


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

闽ICP备14008679号