栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

912 Sort an Array

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

912 Sort an Array

1.快排 java

用less more划分大于区 小于区 等于区,采用随机取数,时间复杂度

class Solution {
    public int[] sortArray(int[] nums) {
        if (nums.length <= 1 ) {
            return nums;
        }
        quickSort(nums, 0, nums.length - 1);
        return nums;
    }
    
     private static void quickSort(int[] nums, int left, int right) {
         if (left >= right) {
             return;
         }
         swap(nums, left + (int) Math.random() * (right - left + 1), right);
         int[] p = partition(nums, left, right);
         quickSort(nums, left, p[0] - 1);
         quickSort(nums, p[1] + 1, right);
     }

     private static int[] partition(int[] nums, int left, int right) {
         int less = left - 1;
         int more = right;
         while (left < more) {
             if (nums[left] > nums[right]) {
                  swap(nums, left, --more);
             } else if (nums[left] < nums[right]) {
                 swap(nums, left++, ++less);
             }  else {
                 left++;
             }
         }
         swap(nums, more, right);
         return new int[] {less + 1, more};
     }


     private static void swap(int[] nums, int i, int j) {
         int temp = nums[i];
         nums[i] = nums[j];
         nums[j] = temp;
     }
}

2.归并排序 master 公式

class Solution {
    public int[] sortArray(int[] nums) {
      if (nums.length <= 1) return nums;
      sortByHalf(nums, 0, nums.length - 1);
      return nums;
    }

    private void sortByHalf(int[] nums, int left, int right) {
      if (left >= right) {
      return;
      }
      int mid = left + (right - left) / 2;
      sortByHalf(nums, left, mid);
      sortByHalf(nums, mid + 1, right);
      merge(nums, left, mid, right);
    }

    private void merge(int[] nums, int left, int mid, int right) {
      int[] tmpArray = new int[right - left + 1];
      int i = left;
      int j = mid + 1;
      int k = 0;
      while(i <= mid && j <= right) {
        if (nums[i] < nums[j]) {
        tmpArray[k++] = nums[i++];
        } else {
        tmpArray[k++] = nums[j++];
        }
      }
      while (i <= mid) {
        tmpArray[k++] = nums[i++];
      }
      while (j <= right) {
      tmpArray[k++] = nums[j++];
      }
      for(i = 0; i < tmpArray.length; i++) {
      nums[i + left] = tmpArray[i];
      }
    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/584975.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号