21xrx.com
2024-12-23 01:14:36 Monday
登录
文章检索 我的文章 写文章
Java堆排序原理及实现案例
2023-06-12 21:24:16 深夜i     --     --
Java堆排序 原理 实现

Java堆排序是常用的排序算法之一,它利用堆这种数据结构来实现排序。堆排序的时间复杂度为O(nlogn),是一种高效快速的排序方法。下面我们就来详细了解一下Java堆排序的原理及实现。

Java堆排序的原理:将待排序的数组构建成一个大根堆或小根堆,然后将堆根与数组末尾元素交换位置,然后对剩下的元素重复该过程直到排序完成。

下面是Java堆排序的实现代码:


public static void heapSort(int[] arr) {

 buildMaxHeap(arr); //创建大根堆

 for (int i = arr.length - 1; i >= 1; i--) {

  swap(arr, 0, i); //把堆顶元素移到末尾

  maxHeapify(arr, 0, i); //对堆顶进行调整,重新成为大根堆

 }

}

public static void buildMaxHeap(int[] arr) {

 int length = arr.length;

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

  maxHeapify(arr, i, length);

 }

}

public static void maxHeapify(int[] arr, int index, int heapSize) {

 int left = index * 2 + 1; //左子节点

 int right = index * 2 + 2; //右子节点

 int maxIndex = index;

 if (left < heapSize && arr[left] > arr[maxIndex])

  maxIndex = left;

 

 if (right < heapSize && arr[right] > arr[maxIndex])

  maxIndex = right;

 

 if (maxIndex != index) {

  swap(arr, index, maxIndex);

  maxHeapify(arr, maxIndex, heapSize);

 }

}

public static void swap(int[] arr, int i, int j) {

 int temp = arr[i];

 arr[i] = arr[j];

 arr[j] = temp;

}

以上就是Java堆排序的具体实现步骤,我们可以通过这个代码案例来更深入地理解Java堆排序的原理和过程。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复