public class Heap{ // 构造堆 public static void shift(int a[], int i, int n) { a[0] = a[i]; for(int j=i*2;j<=n;j*=2){ if(j < n && a[j]<a[j+1]){j++;} if(a[0]<a[j]) {a[i]=a[j];i=j;}else{break;} } a[i]=a[0]; } // 堆排序 public static void sort(int a[]) { int n = a.length-1; for(int i=n/2;i>0;i--) { shift(a,i,n); } for(int i=n;i>0;i--) { int temp = a[i]; a[i] = a[1]; a[1] = temp; shift(a,1,i-1); } } // a[0]用于交换使用 // 使用大顶堆进行排序 public static void main(String args[]) { int[] a = {0,1,3,5,2,9,4,67,8}; sort(a); for(int i=0;i<a.length;i++) { if(i == 0) continue; System.out.print(a[i]+" "); } } }
排序结果:1 2 3 4 5 8 9 67
相关推荐
Java 堆排序实例(大顶堆、小顶堆) 在计算机科学中,堆排序是一种基于堆这种数据结构的排序算法。堆是一种近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。堆...
堆排序通过构造大顶堆或小顶堆,然后将堆顶元素与末尾元素交换,缩小排序范围,重复此过程,直到排序完成。 8. **计数排序** - 计数排序是非基于比较的排序算法,适用于整数排序。它通过统计每个数字出现的次数,...
7. **堆排序(Heap Sort)**:堆排序利用了堆这种数据结构,构建一个大顶堆或小顶堆,然后将堆顶元素与末尾元素交换,调整堆,直到所有元素都交换到正确位置。Java中,可以使用 `PriorityQueue` 实现堆排序,或者...
堆排序利用了二叉堆的特性,将待排序的序列构造成一个大顶堆或小顶堆,然后将堆顶元素与末尾元素交换,再调整剩余元素成为新的堆,如此反复。Java中可以使用`PriorityQueue`类实现堆排序。 4. **快速排序(Quick ...
从给定的文件信息中,我们可以提炼出关于Java中几种主要排序算法的详细知识点,包括插入排序、希尔排序、选择排序、堆排序以及交换排序。下面将深入探讨这些排序算法的特点、工作原理以及它们的稳定性与时间复杂度。...
堆排序可以分为大顶堆排序和小顶堆排序两种。 ### 7. 归并排序 - **稳定性**:稳定 - **时间复杂度**:O(nlogn) - **空间复杂度**:O(n) 归并排序是一种采用分治法的排序算法。其思路是将数组分成左右两半,分别...
堆排序利用了完全二叉树的特性,将待排序的数组构造成一个大顶堆或小顶堆,然后将堆顶元素与末尾元素互换,调整剩余元素重新构造成堆,重复这个过程直到整个数组有序。堆排序的时间复杂度为O(n log n)。 5. **冒泡...
堆排序利用了完全二叉树的特性,将待排序的序列构造成一个大顶堆或小顶堆,然后将堆顶元素与末尾元素交换,调整堆,继续此过程,直到所有元素排序完毕。Java的PriorityQueue类可以用来实现堆排序的一部分功能。 7. ...
堆排序是一种基于比较的排序技术,它将待排序的数据构造成一个大顶堆或者小顶堆,不断调整堆结构并删除堆顶元素,直至所有元素都被排序。堆排序的时间复杂度为O(nlog2n),是一种比较高效的排序方法。 ```java ...
堆排序利用了二叉堆的数据结构,可以将待排序的序列构造成一个大顶堆或小顶堆,然后将堆顶元素与末尾元素交换,再调整剩余元素为堆,重复此过程,直至整个序列有序。堆排序的时间复杂度为O(n log n)。 5. 快速排序...
"9大排序算法java版"这个压缩包可能包含了以下九种经典的排序算法的Java实现: 1. 冒泡排序(Bubble Sort):这是一种简单的排序算法,通过重复遍历待排序的数组,依次比较相邻元素并交换位置来完成排序。时间...
堆排序利用了二叉堆结构,将待排序序列构造成一个大顶堆或小顶堆,然后将堆顶元素与末尾元素交换,调整堆,直到所有元素排序完毕。时间复杂度为O(n log n),原地排序但不稳定。 7. 计数排序(Counting Sort) 计数...
首先构造一个大顶堆,然后将堆顶元素与最后一个元素交换,调整堆,如此重复,直到所有元素排序完成。时间复杂度为O(n log n)。Java实现如下: ```java void heapify(int[] arr, int n, int i) { int largest = i; ...
堆排序首先将待排序序列构造成一个大顶堆(或小顶堆),此时整个序列的最大值就是堆顶的根节点。然后将其与末尾元素进行交换,此时末尾就为最大值。然后将剩余n-1个元素重新构造成一个堆,这样会得到n个元素的次小值...
堆排序利用了完全二叉树的特性构建堆结构,将数组转换成一个大顶堆(或小顶堆),然后将堆顶元素与末尾元素交换,再调整堆。时间复杂度为O(n log n),原地排序,但稳定性较差。 7. 计数排序(Counting Sort)、桶...
堆排序利用了二叉堆的性质,将待排序的序列构造成一个大顶堆或小顶堆,然后交换堆顶元素与末尾元素,缩小排序范围,重复此过程直到所有元素排序完毕。Java中,可以利用优先队列(PriorityQueue)实现堆排序。 7. **...
7. **堆排序**:基于完全二叉树的堆数据结构,通过构建大顶堆或小顶堆进行排序。堆排序在原地进行,无需额外空间,但效率低于快速排序。 8. **计数排序**:非基于比较的排序,适用于整数排序,统计每个元素出现的...
6. 堆排序:堆排序利用了完全二叉树的特性,将待排序序列构造成一个大顶堆或小顶堆,然后交换堆顶元素与最后一个元素,缩小排序范围,再次调整为堆。在Java中,可以使用数组来模拟堆结构,通过调整函数实现堆的构建...
堆排序利用堆这种数据结构实现排序,首先构建一个大顶堆或小顶堆,然后将堆顶元素与最后一个元素交换,再调整堆,重复这个过程直到排序完成。时间复杂度始终为O(n log n)。Java实现如下(未给出,需自行实现)。 8....