parent= (i-1)/2 (向下取整);
    c1 = 2i + 1;
    c2 = 2
    i+2;

    1. // 大根堆排序
    2. let tree = [4,10,3,5,1,2];
    3. let n = 6;
    4. heapify(tree,6,0);
    5. function build_heap(tree, n) {
    6. let last_node = n - 1;
    7. let parent = (last_node - 1) / 2;
    8. for (let i = parent; i >= 0; i--) {
    9. heapify(tree, n, i);
    10. }
    11. }
    12. function heapify(tree, n, i) {
    13. if (i >= n) {
    14. return;
    15. }
    16. let c1 = 2 * i + 1;
    17. let c2 = 2 * i + 2;
    18. let max = i;
    19. if (c1 < n && tree[ci] > tree[max]) {
    20. max = c1;
    21. }
    22. if (c2 < n && tree[c2] > tree[max]) {
    23. max = c2;
    24. }
    25. if (max !== i) {
    26. swap(tree, max, i);
    27. heapify(tree, n, max);
    28. }
    29. }
    30. function swap(tree, i, j) {
    31. let temp = tree[i];
    32. tree[i] = tree[j];
    33. tree[j] = temp;
    34. }
    35. function findKthLargest(nums,k) {
    36. let len = nums.length;
    37. build_heap(nums, len);
    38. let heapsize = len;
    39. for (let i = len; i >= len - k + 1; i--) {
    40. swap(nums, 0, i);
    41. heapsize--;
    42. heapify(nums, 0, heapsize);
    43. }
    44. return nums[0];
    45. }

    讲解视频: https://www.youtube.com/watch?v=j-DqQcNPGbE