1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
| public void heapSort(int[] nums){ int len = nums.length - 1; int index = nums.length/2 - 1; for (int i = index; i >= 0; i--) { maxHeapify(nums, i, len); } for (int i = len; i > 0; i--) { swap(nums, 0, i); maxHeapify(nums, 0, i-1); } }
public void maxHeapify(int[] nums, int index, int len){ int left = 2*index + 1; int right = left + 1; int max = left; if(left > len){ return; } if (right <= len && nums[right] > nums[left]) { max = right; } if(nums[max] > nums[index]){ swap(nums, max, index); maxHeapify(nums, max, len); } }
public void swap(int[] nums, int i, int j){ int tmp = nums[i]; nums[i] = nums[j]; nums[j] = tmp; }
@Test public void heapSort(){ int[] nums = {3,2,1,4,2,5,1,6}; heapSort(nums); for (int num : nums) { System.out.print(num + " "); } System.out.println(); }
|