`

Java 堆排序算法

阅读更多
/**
 * 
 * 堆排序:
 * 
 */
public class HeapSort {

	public void sort(int[] data) {
		MaxHeap h = new MaxHeap();
		h.init(data);
		for (int i = 0; i < data.length; i++)
			h.remove();
		System.arraycopy(h.queue, 1, data, 0, data.length);
	}

	private static class MaxHeap {
		void init(int[] data) {
			this.queue = new int[data.length + 1];
			for (int i = 0; i < data.length; i++) {
				queue[++size] = data[i];
				fixUp(size);
			}
		}

		private int size = 0;

		private int[] queue;

		public int get() {
			return queue[1];
		}

		public void remove() {
			swap(queue, 1, size--);
			fixDown(1);
		}

		// fixdown
		private void fixDown(int k) {
			int j;
			while ((j = k << 1) <= size) {
				if (j < size && queue[j] < queue[j + 1])
					j++;
				if (queue[k] > queue[j]) // 不用交换
					break;
				swap(queue, j, k);
				k = j;
			}
		}

		private void fixUp(int k) {
			while (k > 1) {
				int j = k >> 1;
				if (queue[j] > queue[k])
					break;
				swap(queue, j, k);
				k = j;
			}
		}

		private void swap(int[] data, int i, int j) {
			int temp = data[i];
			data[i] = data[j];
			data[j] = temp;
		}
	}
}
分享到:
评论

相关推荐

    堆排序算法(java)

    java的堆排序算法实现程序,含测试,可直接运行。java的堆排序算法实现程序,含测试,可直接运行。

    应用Java和Python分别实现堆排序算法

    堆排序:应用Java和Python分别实现堆排序算法; 堆排序:应用Java和Python分别实现堆排序算法; 堆排序:应用Java和Python分别实现堆排序算法; 堆排序:应用Java和Python分别实现堆排序算法; 堆排序:应用Java和...

    堆排序算法 java

    堆排序算法 java

    Java堆排序算法详解

    "Java堆排序算法详解" Java堆排序算法是将原始数据转换为堆的形式,然后重复地删除堆顶元素,并将其插入到有序的序列中,以达到排序的目的。下面是Java堆排序算法的知识点总结: 1. heap的概念:堆是一种特殊的...

    面试题 写一个堆排序算法 c++

    一个堆排序算法 c++写的 逻辑相同 可自行 改为java 写一个堆排序算法 c++ 写一个堆排序算法 c++ 写一个堆排序算法 c++ 写一个堆排序算法 c++ 写一个堆排序算法 c++ 写一个堆排序算法 c++ 写一个堆排序算法 c++ 写一...

    java堆排序原理及算法实现

    以下是一个简单的Java堆排序算法实现: ```java public class HeapSort { public void sort(int[] arr) { int n = arr.length; // 构建最大堆 for (int i = n / 2 - 1; i &gt;= 0; i--) { adjustHeap(arr, i, n...

    JAVA堆排序算法的讲解

    "JAVA堆排序算法的讲解" JAVA堆排序算法是基于堆数据结构的一种选择排序算法,它的最坏、最好、平均时间复杂度均为O(nlogn),是一种不稳定排序。堆排序的基本思想是将待排序序列构造成一个大顶堆,此时,整个序列...

    Java各种排序算法代码.zip

    这个名为"Java各种排序算法代码.zip"的压缩包包含了一系列实现不同排序算法的Java源代码。排序算法是计算机科学中的基本概念,用于对一组数据进行排列。下面将详细讨论这些算法及其在Java中的实现。 1. 冒泡排序...

    Java实现堆排序.rar

    以下是一个简单的Java堆排序算法实现的伪代码: ```java class HeapSort { void heapify(int arr[], int n, int i) { // 代码实现下沉操作 } void swap(int arr[], int i, int j) { // 代码实现元素交换 } ...

    java排序算法

    ### Java排序算法详解 在Java编程中,排序算法是数据结构与算法中不可或缺的一部分,它不仅能够帮助我们理解和处理数据,还能提升程序的性能。本文将深入探讨Java中常见的几种基本排序算法,包括插入排序、交换排序...

    详解Java常用排序算法-堆排序

    在上面的代码中,我们使用 Java 语言实现了堆排序算法。其中,Heap 类中包括两个函数:heapSort 和 heapify。heapSort 函数接受一个整数数组作为输入,并使用堆排序算法对该数组进行排序。heapify 函数用于对一个...

    Java选择排序算法源码

    在编程领域,排序算法是计算机科学中的基础概念,它们用于整理数据序列,使...在实际开发中,可能会使用更高效的排序算法,如快速排序、归并排序或堆排序等,但了解并能实现选择排序对理解排序算法的工作原理至关重要。

    Java所有排序算法大全

    在编程领域,排序算法是计算机科学中的核心概念,特别是在Java这样的高级编程语言中。本文将深入探讨Java中常见的几种排序算法,包括它们的工作原理、优缺点以及如何在实际编程中应用。 首先,我们来看`BubbleSort...

    用Java实现的堆排序算法

    用Java实现的堆排序算法,二叉树转换为堆,然后排序

    Java排序算法练习:1.快速排序 2.归并排序 3.插入排序 4.冒泡排序 5.选择排序 6.堆排序

    这里我们将深入探讨标题和描述中提到的六种排序算法:快速排序、归并排序、插入排序、冒泡排序、选择排序以及堆排序。 1. **快速排序**:由C.A.R. Hoare在1960年提出,是一种高效的分治算法。快速排序的基本思想是...

    堆排序算法(流程图、关键代码、复杂度分析)

    下面是 Java 语言实现的堆排序算法的关键代码: ```java public class TestHeapSort { public boolean isHeap(int[] a, int i) { int n = a.length; if (i &gt;= n) { return true; } int left = 2 * i + 1; // ...

    堆排序算法原理与Java实现详解

    内容概要:本文详细讲解了堆排序算法的基本原理及其在Java中的具体实现。首先介绍堆作为近似完全二叉树的特性及满足堆积性质的要求,随后给出堆排序的具体步骤,最后提供了完整的Java代码示例来实现这一算法。 适合...

    Java各种排序算法代码

    在编程领域,排序算法是计算机科学中的核心概念,尤其是在Java这样的高级编程语言中。Java提供了丰富的内置库函数,如Arrays.sort(),可以方便地对数组进行排序。然而,理解并掌握各种排序算法对于优化程序性能、...

    Java各种排序算法代码.

    在编程领域,排序算法是计算机科学中的核心概念,特别是在Java这样的高级编程语言中。排序算法是用来组织和优化数据结构的关键工具,它可以帮助我们快速查找、分析和处理数据。本资源包含的是Java实现的各种常见排序...

    常用排序算法java演示

    本文将深入探讨标题"常用排序算法java演示"中涉及的知识点,包括排序算法的原理、Java实现方式以及其在实际应用中的图形演示。 首先,让我们逐一了解几种常见的排序算法: 1. **冒泡排序(Bubble Sort)**:这是一...

Global site tag (gtag.js) - Google Analytics