作者:Robin Lu | 来源:互联网 | 2023-09-03 16:57
堆排序的基本思想
堆排序的基本思想是:
1.将待排序序列构造成一个大顶堆
2.此时,整个序列的最大值就是堆顶的根节点。
3.将其与末尾元素进行交换,此时末尾就为最大值。
4.然后将剩余n-1个元素重新构造成一个堆,这样会得到n个元素的次小值。如此反复执行,便能得到一个有序序列了。
实际应用理解
要求:给你一个数组 {4,6,8,5,9} , 要求使用堆排序法,将数组升序排序。
初始结构如下:
代码实现
package sort;import java.util.Arrays;public class HeapSort {public static void main(String[] args) {int arr[] &#61; {4,6,8,5,9,-1,90,3,-45,45};heapSort(arr);}public static void heapSort(int arr[]) {int temp &#61; 0;System.out.println("堆排序&#xff01;&#xff01;&#xff01;");for(int i &#61; arr.length/2 -1;i>&#61;0;i--) {adjustHeap(arr,i,arr.length);}for(int j &#61; arr.length-1;j>0;j--) {temp &#61; arr[j];arr[j] &#61; arr[0];arr[0] &#61; temp;adjustHeap(arr,0,j);}System.out.println("数组&#61;"&#43;Arrays.toString(arr));}public static void adjustHeap(int arr[],int i,int length) {int temp &#61; arr[i];for(int k &#61; i*2&#43;1;k<length;k&#61;k*2&#43;1) {if(k&#43;1<length &&arr[k] < arr[k&#43;1] ) {k&#43;&#43;;}if(arr[k]>temp) {arr[i] &#61;arr[k];i&#61;k;}else {break;}arr[i] &#61; temp;}}
}
堆排序的时间复杂度为O&#xff08;nlogn&#xff09;