1. 程式人生 > >最優雅的堆排序Java實現

最優雅的堆排序Java實現

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;
    }
   }