堆排序<1>代码实现讲解
java基本数据类型从小到大 " />

堆排序是常见的排序算法之一,具有时间复杂度O(nlogn)的优异性能。堆排序通过构建一个二叉堆进行排序,其中二叉堆指的是满足父节点大于等于(或小于等于)子节点的完全二叉树。堆排序的基本思路是先将待排序列构建成一个二叉堆,然后将堆顶元素与堆底元素交换,使堆底元素成为有序区的一部分,再通过调整堆顶元素,使其重新成为大(或小)根堆,重复上述过程直到整个序列有序。接下来将详细介绍堆排序的Java代码实现。

1.构建大根堆

Java代码如下所示:

```java

public static void buildHeap(int[] arr, int len) {

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

adjustHeap(arr, i, len);

}

}

public static void adjustHeap(int[] arr, int i, int len){

int temp = arr[i];//先取出当前元素i

for(int j=2*i; j<=len; j*=2){

if(jn(String[] args) {

int[] a = { 0, 1, 4, 8, 3, 6, 9, 7, 5, 2 };

int len = a.length - 1;

heapSort(a,len);

for (int i = 1; i <= len; i++) {

System.out.print(a[i] + " ");

}

}

public static void buildHeap(int[] arr, int len) {

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

adjustHeap(arr, i, len);

}

}

public static void adjustHeap(int[] arr, int i, int len){

int temp = arr[i];//先取出当前元素i

for(int j=2*i; j<=len; j*=2){

if(j j++;

}

if(temp>=arr[j]){//如果父节点大于左右孩子,则退出

break;

}

arr[i] = arr[j];//将较大的值赋给当前节点i

i = j;//让i指向j,继续循环比较

}

arr[i] = temp;//将temp值放到此时的i位置

}

public static void heapSort(int[] a,int len){

buildHeap(a,len);//先构建堆

for(int i=len;i>1;i--){

int temp=a[1];//将堆顶元素与堆底元素交换

a[1]=a[i];

a[i]=temp;

adjustHeap(a,1,i-1);//重新调整堆顶元素位置

}

}

}

```

4.结果分析

排序前序列为:0 1 4 8 3 6 9 7 5 2

排序后序列为:0 1 2 3 4 5 6 7 8 9

从结果可以看出,堆排序在 Java 中能够很好地完成升序排序。时间复杂度为 O(nlogn),空间复杂度为 O(1)。但它的缺点是不稳定的,不适用于要求稳定性的场景。

壹涵网络我们是一家专注于网站建设、企业营销、网站关键词排名、AI内容生成、新媒体营销和短视频营销等业务的公司。我们拥有一支优秀的团队,专门致力于为客户提供优质的服务。

我们致力于为客户提供一站式的互联网营销服务,帮助客户在激烈的市场竞争中获得更大的优势和发展机会!

点赞(78) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿
发表
评论
返回
顶部