21xrx.com
2024-09-17 03:54:15 Tuesday
登录
文章检索 我的文章 写文章
Java堆排序算法:因二叉树而大器
2023-06-14 21:43:56 深夜i     --     --
Java堆排序算法 二叉树 大堆 小堆 时间复杂度 代码实现

Java堆排序算法是一种基于二叉树构建堆,然后利用堆的特性进行排序的高效算法。堆是一种特殊的树形结构,具有以下特点:

- 每个父节点的键值大于或等于其子节点的键值,称为大堆。

- 每个父节点的键值小于或等于其子节点的键值,称为小堆。

Java堆排序算法就是利用大堆或小堆进行排序的一种算法。排序的过程实现了O(nlogn)的时间复杂度,是一种非常高效的排序算法。

我们来看看Java堆排序算法的代码实现:


public class HeapSort {

  public static void sort(int[] arr) {

    int n = arr.length;

    // 构建大堆

    for (int i = n / 2 - 1; i >= 0; i--)

      heapify(arr, n, i);

    // 把堆顶元素和最后一个元素交换位置,再重新构建大堆

    for (int i = n - 1; i >= 0; i--) {

      int temp = arr[0];

      arr[0] = arr[i];

      arr[i] = temp;

      heapify(arr, i, 0);

    }

  }

  private static void heapify(int[] arr, int n, int i) {

    int largest = i;

    int left = 2 * i + 1;

    int right = 2 * i + 2;

    if (left < n && arr[left] > arr[largest])

      largest = left;

    if (right < n && arr[right] > arr[largest])

      largest = right;

    if (largest != i) {

      int temp = arr[i];

      arr[i] = arr[largest];

      arr[largest] = temp;

      heapify(arr, n, largest);

    }

  }

  public static void main(String[] args) {

    int[] arr = 90;

    sort(arr);

    System.out.println(Arrays.toString(arr));

  }

}

Java堆排序算法的关键在于构建堆的过程,这个过程会通过从非叶子节点开始依次进行调整,然后构建一个符合条件的大堆或小堆。我们可以看到,Java堆排序算法的代码实现非常简洁,同时也非常高效。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复
    相似文章