题目描述:
------------恢复内容开始------------
------------恢复内容开始------------
选择排序 O(N^2)
class Solution { public int[] sortArray(int[] nums) { int len = nums.length; for(int i = 0; i < len -1; i++){ int minIndex = i; for(int j = i+ 1; j < len; j++){ if (nums[j] <nums[minIndex]){ minIndex = j; } } swap(nums, i, minIndex); } return nums; } private void swap(int[] nums, int index1, int index2) { int temp = nums[index1]; nums[index1] = nums[index2]; nums[index2] = temp; } }
插入排序: O(n^2)
class Solution { public int[] sortArray(int[] nums) { int len = nums.length; for (int i = 1; i <len; i++){ int temp = nums[i]; int j = i; while(j > 0 && nums[j-1] > temp){ nums[j] = nums[j-1]; j--; } nums[j] = temp; } return nums; }
}
归并排序 O(nlogn) O(n)
class Solution { private static final int INSERTION_SORT_THRESHOLD = 7; public int[] sortArray(int[] nums) { int len = nums.length; int [] temp = new int[len]; mergeSort(nums,0,len -1 , temp); return nums; } private void mergeSort(int[] nums, int left, int right, int[] temp){ if (right - left <= INSERTION_SORT_THRESHOLD){ insertionSort(nums,left,right); return ; } int mid = left + (right - left) /2; mergeSort(nums,left,mid, temp); mergeSort(nums,mid +1, right, temp); if(nums[mid] <= nums[mid +1]){ return; } mergeOfTwoSortedArray(nums,left,mid,right,temp); } private void insertionSort(int arr[], int left ,int right){ for(int i = left +1 ; i <= right; i++){ int temp = arr[i]; int j= i; while(j>left && arr[j-1] > temp){ arr[j] = arr[j-1]; j--; } arr[j] = temp; } } private void mergeOfTwoSortedArray(int [] nums, int left, int mid, int right, int[] temp){ System.arraycopy(nums,left,temp,left,right + 1 - left); int i = left; int j = mid + 1; for (int k =left; k <= right; k++){ if(i == mid +1){ nums[k] = temp[j]; j++; }else if (j == right + 1){ nums[k] = temp[i]; i++; }else if (temp[i] <= temp[j]){ nums[k] = temp[i]; i++; }else{ nums[k] = temp[j]; j++; } } } }
------------恢复内容结束------------
------------恢复内容结束------------
原文:https://www.cnblogs.com/oldby/p/12625586.html