最優雅的堆排序Java實現
阿新 • • 發佈:2018-12-14
public class HeapSort { public int[] sort (int[] nums){ for (int i = 0; i < nums.length; i++){ int j = i; int parent = (j-1)/2; while (j>0 && nums[j] > nums[parent]){ swap(nums, j, parent); j = parent; parent = (j-1)/2; } } for (int limit = nums.length-1; limit >= 0; limit--){ swap(nums, limit, 0); int parent = 0; while (parent < limit) { int left = 2*parent+1; if (left >= limit) { break; } int right = (left + 1) >= limit ? left : (left + 1); int largerIndex = (nums[left] > nums[right]) ? left : right; if (nums[parent] < nums[largerIndex]) { swap(nums, parent, largerIndex); parent = largerIndex; } else break; } } return nums; } public void swap (int[] nums, int i, int j){ int temp = nums[i]; nums[i] = nums[j]; nums[j] = temp; } }