`

java大顶堆排序

阅读更多

 

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 堆排序实例(大顶堆、小顶堆)

    Java 堆排序实例(大顶堆、小顶堆) 在计算机科学中,堆排序是一种基于堆这种数据结构的排序算法。堆是一种近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。堆...

    java八大排序算法

    堆排序通过构造大顶堆或小顶堆,然后将堆顶元素与末尾元素交换,缩小排序范围,重复此过程,直到排序完成。 8. **计数排序** - 计数排序是非基于比较的排序算法,适用于整数排序。它通过统计每个数字出现的次数,...

    Java实现八大排序算法

    7. **堆排序(Heap Sort)**:堆排序利用了堆这种数据结构,构建一个大顶堆或小顶堆,然后将堆顶元素与末尾元素交换,调整堆,直到所有元素都交换到正确位置。Java中,可以使用 `PriorityQueue` 实现堆排序,或者...

    java版冒泡排序,插入排序,堆排序,快速排序,归并排序,希尔排序,桶排序

    堆排序利用了二叉堆的特性,将待排序的序列构造成一个大顶堆或小顶堆,然后将堆顶元素与末尾元素交换,再调整剩余元素成为新的堆,如此反复。Java中可以使用`PriorityQueue`类实现堆排序。 4. **快速排序(Quick ...

    java 各种排序排序.pdf

    从给定的文件信息中,我们可以提炼出关于Java中几种主要排序算法的详细知识点,包括插入排序、希尔排序、选择排序、堆排序以及交换排序。下面将深入探讨这些排序算法的特点、工作原理以及它们的稳定性与时间复杂度。...

    java8大排序

    堆排序可以分为大顶堆排序和小顶堆排序两种。 ### 7. 归并排序 - **稳定性**:稳定 - **时间复杂度**:O(nlogn) - **空间复杂度**:O(n) 归并排序是一种采用分治法的排序算法。其思路是将数组分成左右两半,分别...

    java 8种排序算法

    堆排序利用了完全二叉树的特性,将待排序的数组构造成一个大顶堆或小顶堆,然后将堆顶元素与末尾元素互换,调整剩余元素重新构造成堆,重复这个过程直到整个数组有序。堆排序的时间复杂度为O(n log n)。 5. **冒泡...

    Java各种排序算法代码.zip

    堆排序利用了完全二叉树的特性,将待排序的序列构造成一个大顶堆或小顶堆,然后将堆顶元素与末尾元素交换,调整堆,继续此过程,直到所有元素排序完毕。Java的PriorityQueue类可以用来实现堆排序的一部分功能。 7. ...

    Java 排序大全排序大全

    堆排序是一种基于比较的排序技术,它将待排序的数据构造成一个大顶堆或者小顶堆,不断调整堆结构并删除堆顶元素,直至所有元素都被排序。堆排序的时间复杂度为O(nlog2n),是一种比较高效的排序方法。 ```java ...

    Java必知的8大排序

    堆排序利用了二叉堆的数据结构,可以将待排序的序列构造成一个大顶堆或小顶堆,然后将堆顶元素与末尾元素交换,再调整剩余元素为堆,重复此过程,直至整个序列有序。堆排序的时间复杂度为O(n log n)。 5. 快速排序...

    9大排序算法java版

    "9大排序算法java版"这个压缩包可能包含了以下九种经典的排序算法的Java实现: 1. 冒泡排序(Bubble Sort):这是一种简单的排序算法,通过重复遍历待排序的数组,依次比较相邻元素并交换位置来完成排序。时间...

    JAVA排序汇总 各种排序

    堆排序利用了二叉堆结构,将待排序序列构造成一个大顶堆或小顶堆,然后将堆顶元素与末尾元素交换,调整堆,直到所有元素排序完毕。时间复杂度为O(n log n),原地排序但不稳定。 7. 计数排序(Counting Sort) 计数...

    常见的八大排序算法及其JAVA实现

    首先构造一个大顶堆,然后将堆顶元素与最后一个元素交换,调整堆,如此重复,直到所有元素排序完成。时间复杂度为O(n log n)。Java实现如下: ```java void heapify(int[] arr, int n, int i) { int largest = i; ...

    java 8大排序算法

    堆排序首先将待排序序列构造成一个大顶堆(或小顶堆),此时整个序列的最大值就是堆顶的根节点。然后将其与末尾元素进行交换,此时末尾就为最大值。然后将剩余n-1个元素重新构造成一个堆,这样会得到n个元素的次小值...

    java源码 多种排序方式

    堆排序利用了完全二叉树的特性构建堆结构,将数组转换成一个大顶堆(或小顶堆),然后将堆顶元素与末尾元素交换,再调整堆。时间复杂度为O(n log n),原地排序,但稳定性较差。 7. 计数排序(Counting Sort)、桶...

    JAVA各种排序方法及改良

    堆排序利用了二叉堆的性质,将待排序的序列构造成一个大顶堆或小顶堆,然后交换堆顶元素与末尾元素,缩小排序范围,重复此过程直到所有元素排序完毕。Java中,可以利用优先队列(PriorityQueue)实现堆排序。 7. **...

    Java各种排序算法代码.

    7. **堆排序**:基于完全二叉树的堆数据结构,通过构建大顶堆或小顶堆进行排序。堆排序在原地进行,无需额外空间,但效率低于快速排序。 8. **计数排序**:非基于比较的排序,适用于整数排序,统计每个元素出现的...

    java数据结构大作业,排序算法是性能比较

    6. 堆排序:堆排序利用了完全二叉树的特性,将待排序序列构造成一个大顶堆或小顶堆,然后交换堆顶元素与最后一个元素,缩小排序范围,再次调整为堆。在Java中,可以使用数组来模拟堆结构,通过调整函数实现堆的构建...

    Java排序算法(桶排序,基数排序等)

    堆排序利用堆这种数据结构实现排序,首先构建一个大顶堆或小顶堆,然后将堆顶元素与最后一个元素交换,再调整堆,重复这个过程直到排序完成。时间复杂度始终为O(n log n)。Java实现如下(未给出,需自行实现)。 8....

Global site tag (gtag.js) - Google Analytics