Untitled
unknown
java
4 years ago
1.3 kB
7
Indexable
public static void main(String[] args) { SortArrayHeap sa = new SortArrayHeap(); // System.out.println(Arrays.toString(sa.sortArray(new int[]{5, 2, 3, 1}))); // System.out.println(Arrays.toString(sa.sortArray(new int[]{1,2,3,4,5}))); // System.out.println(Arrays.toString(sa.sortArray(new int[]{1,3,5,4,2}))); // System.out.println(Arrays.toString(sa.sortArray(new int[]{5,1,1,2,0,0}))); } public int[] sortArray(int[] nums) { int N = nums.length - 1; for (int i = N / 2; i >= 0; i--) { sink(nums, i, N); } while (N > 0) { exch(nums, 0, N); sink(nums, 0, --N); } return nums; } private void exch(int[] nums, int a, int b) { int tmp = nums[a]; nums[a] = nums[b]; nums[b] = tmp; } private void sink(int[] nums, int idx, int N) { while (idx != N && idx * 2 <= N) { int j = idx == 0 ? 1 : idx * 2; while (j < N && less(nums, j, j + 1)) { j++; } if (!less(nums, idx, j)) { break; } exch(nums, idx, j); idx = j; } } private boolean less(int[] nums, int a, int b) { return nums[a] < nums[b]; } }
Editor is loading...