|
|
今天用heap sort写了一下 912题
总结:
1. size--; 和 siftDown(nums, 0, size); 写反了。所以错了。这里要先size--,才能去siftdown
2.- class Solution {
- public int[] sortArray(int[] nums) {
-
- if(nums == null || nums.length == 0){
- return nums;
- }
- int size = nums.length;
-
- heapify(nums, size);
-
- while(size > 0){
- swap(nums, 0, size - 1);
- size--;
- siftDown(nums, 0, size);
- }
- return nums;
- }
- private void heapify(int[] nums, int size){
- for(int i = (nums.length - 2)/2; i >= 0; i--){
- siftDown(nums, i, size);
- }
- }
- private void siftDown(int[] nums, int index, int size){
- while(index * 2 + 1 <= size - 1){
- int leftChild = index * 2 + 1;
- int biggerChild = leftChild;
-
- if(index * 2 + 2 <= size - 1){
- int rightChild = index * 2 + 2;
- if(nums[leftChild] >= nums[rightChild]){
- biggerChild = leftChild;
- } else {
- biggerChild = rightChild;
- }
- }
-
- if(nums[index] < nums[biggerChild]){
- swap(nums, index, biggerChild);
- index = biggerChild;
- } else {
- break;
- }
- }
- }
- private void swap(int[] nums, int a, int b){
- int tmp = nums[a];
- nums[a] = nums[b];
- nums[b] = tmp;
- }
- }
复制代码 |
|