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(j 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 } 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内容生成、新媒体营销和短视频营销等业务的公司。我们拥有一支优秀的团队,专门致力于为客户提供优质的服务。 我们致力于为客户提供一站式的互联网营销服务,帮助客户在激烈的市场竞争中获得更大的优势和发展机会!
发表评论 取消回复