代码:
1 public int[] sortArray(int[] nums) { 2 if (nums.length == 0 || nums.length == 1) 3 return nums; 4 int n = nums.length; 5 int i, j; 6 for (i = 1; i < n; i++) { 7 if (nums[i] < nums[i - 1]) { 8 int curr = nums[i]; 9 for (j = i - 1; j >= 0 && curr < nums[j]; j--) { 10 nums[j + 1] = nums[j]; 11 } 12 nums[j + 1] = curr; 13 } 14 } 15 return nums; 16 }
代码:
1 public int[] sortArray(int[] nums) { 2 if (nums.length == 0 || nums.length == 1) 3 return nums; 4 int n = nums.length; 5 int i, j; 6 for (i = 1; i < n; i++) { 7 int left = 0; 8 int right = i;//右边界取不到 9 int curr = nums[i]; 10 while (left < right) { 11 int mid = (left + right) / 2; 12 if (nums[mid] > curr) { 13 right = mid; 14 } else { 15 left = mid + 1; 16 } 17 } 18 for (j = i - 1; j >= right; j--) { 19 nums[j + 1] = nums[j]; 20 } 21 nums[j + 1] = curr; 22 } 23 return nums; 24 }
代码:(把插入排序的1变成dk)
1 public int[] sortArray(int[] nums) { 2 if (nums.length == 0 || nums.length == 1) 3 return nums; 4 int n = nums.length; 5 int i, j, dk; 6 for (dk = n / 2; dk >= 1; dk = dk / 2) { 7 for (i = dk; i < n; i++) { 8 if (nums[i] < nums[i - dk]) { 9 int curr = nums[i]; 10 for (j = i - dk; j >= 0 && curr < nums[j]; j -= dk) { 11 nums[j + dk] = nums[j]; 12 } 13 nums[j + dk] = curr; 14 } 15 } 16 } 17 return nums; 18 }
代码:(和图示不一样,代码是冒泡最小)
1 public int[] sortArray(int[] nums) { 2 if (nums.length <= 1) 3 return nums; 4 for (int i = 0; i < nums.length; i++) { 5 boolean flag = false; 6 for (int j = nums.length - 1; j > i; j--) { 7 if (nums[j] < nums[j - 1]) { 8 flag = true; 9 int temp = nums[j]; 10 nums[j] = nums[j - 1]; 11 nums[j - 1] = temp; 12 } 13 } 14 if (!flag) 15 return nums; 16 } 17 return nums; 18 }
代码:
1 public int[] sortArray(int[] nums) { 2 if (nums.length <= 1) 3 return nums; 4 qsort(nums, 0, nums.length - 1); 5 return nums; 6 } 7 8 private void qsort(int[] nums, int leftIndex, int rightIndex) { 9 if (rightIndex < leftIndex) 10 return; 11 int flag = nums[leftIndex]; 12 int left = leftIndex, right = rightIndex; 13 while (left < right) { 14 while (right > left && nums[right] >= flag) { 15 right--; 16 } 17 nums[left] = nums[right]; 18 while (left < right && nums[left] <= flag) { 19 left++; 20 } 21 nums[right] = nums[left]; 22 } 23 nums[left] = flag; 24 qsort(nums, leftIndex, left - 1); 25 qsort(nums, right + 1, rightIndex); 26 }
代码:
1 public int[] sortArray(int[] nums) { 2 if (nums.length <= 1) 3 return nums; 4 for (int i = 0; i < nums.length; i++) { 5 int minIndex = i; 6 int min = nums[i]; 7 for (int j = i + 1; j < nums.length; j++) { 8 if (nums[j] < min) { 9 minIndex = j; 10 min = nums[j]; 11 } 12 } 13 if (minIndex != i) { 14 nums[minIndex] = nums[i]; 15 nums[i] = min; 16 } 17 } 18 return nums; 19 }
代码:
1 public int[] sortArray(int[] nums) { 2 if (nums.length <= 1) 3 return nums; 4 PriorityQueue<Integer> pq = new PriorityQueue<>(); 5 for (int num : nums) { 6 pq.add(num); 7 } 8 for (int i = 0; i < nums.length; i++) { 9 nums[i] = pq.poll(); 10 } 11 return nums; 12 }
代码:
1 public int[] sortArray(int[] nums) { 2 if (nums.length <= 1) 3 return nums; 4 mergeSort(nums, 0, nums.length - 1); 5 return nums; 6 } 7 8 private void mergeSort(int[] nums, int left, int right) { 9 if (left < right) { 10 int mid = (left + right) / 2; 11 mergeSort(nums, left, mid); 12 mergeSort(nums, mid + 1, right); 13 merge(nums, left, mid, right); 14 } 15 } 16 17 private void merge(int[] nums, int left, int mid, int right) { 18 int[] temp = Arrays.copyOf(nums, nums.length); 19 int p1 = left, p2 = mid + 1, k = left; 20 while (p1 <= mid && p2 <= right) { 21 if (nums[p1] <= nums[p2]) 22 temp[k++] = nums[p1++]; 23 else 24 temp[k++] = nums[p2++]; 25 } 26 while (p1 <= mid) { 27 temp[k++] = nums[p1++]; 28 } 29 while (p2 <= right) { 30 temp[k++] = nums[p2++]; 31 } 32 System.arraycopy(temp, 0, nums, 0, temp.length); 33 }
代码:(只用于正数)
1 public int[] sortArray(int[] nums) { 2 if (nums.length <= 1) 3 return nums; 4 int max = Integer.MIN_VALUE; 5 for (Integer n : nums) { 6 max = Math.max(max, n); 7 } 8 int bit = 0; 9 while (max >= Math.pow(10, bit)) { 10 bit++; 11 } 12 for (int i = 0; i < bit; i++) { 13 ArrayList<ArrayList<Integer>> bucket = new ArrayList<>(); 14 for (int j = 0; j < 10; j++) { 15 bucket.add(new ArrayList<>()); 16 } 17 for (Integer n : nums) { 18 int a = (int) (n / Math.pow(10, i)); 19 int bitnum = a % 10; 20 bucket.get(bitnum).add(n); 21 } 22 int k = 0; 23 for (ArrayList<Integer> num : bucket) { 24 for (Integer n : num) { 25 nums[k++] = n; 26 } 27 } 28 } 29 return nums; 30 }