线性表的归并排序

来源:互联网 发布:js去掉前面的空格 编辑:程序博客网 时间:2024/06/05 01:12
public static int[] sort(int[] nums, int low, int high) {              int mid = (low + high) / 2;              if (low < high) {                  // 左边                  sort(nums, low, mid);                  // 右边                  sort(nums, mid + 1, high);                  // 左右归并                  merge(nums, low, mid, high);              }              return nums;          }          public static void merge(int[] nums, int low, int mid, int high) {              int[] temp = new int[high - low + 1];              int i = low;// 左指针              int j = mid + 1;// 右指针              int k = 0;              // 把较小的数先移到新数组中              while (i <= mid && j <= high) {                  if (nums[i] < nums[j]) {                      temp[k++] = nums[i++];                  } else {                      temp[k++] = nums[j++];                  }              }              // 把左边剩余的数移入数组              while (i <= mid) {                  temp[k++] = nums[i++];              }              // 把右边边剩余的数移入数组              while (j <= high) {                  temp[k++] = nums[j++];              }              // 把新数组中的数覆盖nums数组              for (int k2 = 0; k2 < temp.length; k2++) {                  nums[k2 + low] = temp[k2];              }          }
  • 时间复杂度:O(n*log2n)
  • 空间复杂度O(n)
  • 稳定排序
0 0