Java实现归并排序

x33g5p2x  于2021-12-28 转载在 Java  
字(1.2k)|赞(0)|评价(0)|浏览(589)

归并排序

归并排序(Merge Sort)是建立在归并操作上的一种有效,稳定的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。

思路分析

归并操作,也叫归并算法,指的是将两个顺序序列合并成一个顺序序列的方法。
如 设有数列{4,6,3,7,5,9,2,0}
初始状态:4,6,3,7,5,9,2,0
第一次归并后:{4,6},{3,7},{5,9},{0,2}
第二次归并后:{3,4,6,7},{0,2,5,9}
第三次归并后:{0,2,3,4,5,6,7,9}

#代码实现

  1. public class MergeSort {
  2. public static void main(String[] args) {
  3. int[] array = {4,6,3,7,5,9,2,0};
  4. int[] temp = new int[array.length];
  5. mergeSort(array,0,array.length-1,temp);
  6. System.out.println(Arrays.toString(array));
  7. }
  8. public static void mergeSort(int[] array,int left,int right,int[] temp){
  9. if (left<right){ //递归结束的条件 如果left小于right就继续分割
  10. int mid = (left+right)/2;
  11. //分割左边部分
  12. mergeSort(array,left,mid,temp);
  13. //分割右边部分
  14. mergeSort(array,mid+1,right,temp);
  15. //合并
  16. sum(array,left,mid,right,temp);
  17. }
  18. }
  19. public static void sum(int[] array,int left,int mid,int right,int[] temp){
  20. int l = left;
  21. int r = mid+1;
  22. int index = 0;
  23. while(l<=mid && r<=right){
  24. if (array[l] <= array[r]){
  25. temp[index] = array[l];
  26. index++;
  27. l++;
  28. }else {
  29. temp[index] = array[r];
  30. index++;
  31. r++;
  32. }
  33. }
  34. while(l<=mid){
  35. temp[index] = array[l];
  36. index++;
  37. l++;
  38. }
  39. while(r<=right){
  40. temp[index] = array[r];
  41. index++;
  42. r++;
  43. }
  44. int tempIndex = left;
  45. int k = 0;
  46. while(tempIndex<=right){
  47. array[tempIndex] = temp[k];
  48. tempIndex++;
  49. k++;
  50. }
  51. }
  52. }

结果输出

  1. [0, 2, 3, 4, 5, 6, 7, 9]
  2. Process finished with exit code 0

相关文章

最新文章

更多