摘来的********************************************************************
import java.util.Arrays;
public class HeapSort {
public static void heapSort(int[] data){
System.out.println("开始排序");
int arrayLength=data.length;
for(int i=0;i<arrayLength-1;i++){ //循环建堆
buildMaxHeap(data,arrayLength-1-i); //建堆
swap(data,0,arrayLength-1-i); //交换堆顶和最后一个元素
System.out.println(Arrays.toString(data));
}
}
private static void swap(int[] data, int i, int j) {
int tmp=data[i];
data[i]=data[j];
data[j]=tmp;
}
//对data数组从0到lastIndex建大顶堆
private static void buildMaxHeap(int[] data, int lastIndex) {
//从lastIndex处节点(最后一个节点)的父节点开始
for(int i=(lastIndex-1)/2;i>=0;i--){
int k=i; //k保存正在判断的节点
//如果当前k节点的子节点存在
while(k*2+1<=lastIndex){
//k节点的左子节点的索引
int biggerIndex=2*k+1;
if(biggerIndex<lastIndex){ //如果biggerIndex小于lastIndex,
//即biggerIndex+1代表的k节点的右子节点存在
if(data[biggerIndex]<(data[biggerIndex+1])){ //若果右子节点的值较大
//biggerIndex总是记录较大子节点的索引
biggerIndex++;
}
}
//如果k节点的值小于其较大的子节点的值
if(data[k]<(data[biggerIndex])){
swap(data,k,biggerIndex);//交换他们
k=biggerIndex; //将biggerIndex赋予k,开始while循环的下一次循环,
//重新保证k节点的值大于其左右子节点的值
}else{
break;
}
}
}
}
public static void main(String[] args) {
int [] data={33,23,54,21,456,65,29,9,89};
System.out.println("排序之前:\n"+Arrays.toString(data));
heapSort(data);
System.out.println("排序之后:\n"+Arrays.toString(data));
}
}
分享到:
相关推荐
heap Sort. In briefly, it had been done with java.
堆排序(Heap Sort)是一种基于比较的排序算法,它的核心思想是利用二叉堆的数据结构特性来实现排序。本文将详细介绍堆排序的实现步骤、重要概念以及相关操作。 首先,我们要理解什么是堆。堆是一种特殊的树形数据...
it is a source code of heap sort ,so the number of words enough?
堆排序 堆排序(Heap Sort)是一种基于二叉堆数据结构的排序算法
标题中的“test_heap_sort.rar_heap”表明这是一个关于堆排序(Heap Sort)的程序实现,使用了VC++(Visual C++)编程语言。堆排序是一种基于比较的排序算法,它的核心思想是利用二叉堆的数据结构来对数组进行排序。...
AlgorithmMan by Iori,AlgorithmMan是使用Winform技术开发的一套用于算法演示的工具。 HeapSort为AlgorithmMan中的堆排序演示工具(这是可执行文件;需要.net 4.0支持;非源代码)。 原文:C#算法设计排序篇之06-堆...
它的主要思想是将待排序的序列构造成一个大顶堆(或小顶堆),此时,整个序列的最大值(或最小值)就是堆顶的根节点。将其与末尾元素进行交换,此时末尾就为最大值(或最小值)。然后将剩余n-1个元素重新构造成一个...
堆排序是一种基于比较的排序算法,它通过构造一个大顶堆或小顶堆来实现排序。在C#中实现堆排序,我们可以分为两个主要步骤:建堆和调整堆。这里,我们将深入探讨堆排序的基本原理、C#实现的细节以及其在实际应用中的...
本文实例讲述了PHP排序算法之堆排序(Heap Sort)。分享给大家供大家参考,具体如下: 算法引进: 在这里我直接引用《大话数据结构》里面的开头: 在前面讲到 简单选择排序 ,它在待排序的 n 个记录中选择一个最小的...
插入排序(Insertion Sort)是一种简单直观的比较排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用...
- **堆排序(Heap Sort)**:利用二叉堆结构进行排序,时间复杂度为O(n log n)。 2. **在C语言中实现排序函数:** 实现这些排序算法时,你需要定义一个函数,接受一个指针数组和长度作为参数。例如,你可以创建一...
堆排序(Heap Sort) 插入排序(Insertion Sort) 引入排序(Intro Sort) 迭代归并排序(Iterative Merge Sort) 归并插入排序(Merge Insertion Sort) 归并排序(Merge Sort) 最高有效数字优先的基数排序(Msd ...
heap-sort code
堆排序的主算法(Heap-Sort)首先将原始数组构建为最大堆,然后将堆顶元素(当前最大值)与末尾元素交换,这样末尾就得到了排序后的最大值。接着,对剩下的元素重新调整为最大堆,再将堆顶元素与末尾交换,如此反复...
6. **堆排序(Heap Sort)**:利用堆这种数据结构实现的排序方法,效率较高,常用于大数据集。 7. **计数排序(Counting Sort)、桶排序(Bucket Sort)、基数排序(Radix Sort)**:这些是针对特定类型数据(如...
6. **堆排序(Heap Sort)**:利用堆这种数据结构所设计的一种排序算法,能在O(n log n)的时间复杂度内完成排序。 7. **计数排序(Counting Sort)**:非基于比较的排序算法,适用于整数排序,尤其在数据范围不大的...
经典排序算法 - 堆排序Heap sort序 经典排序算法 - 地精排序Gnome Sort 经典排序算法 - 奇偶排序Odd-even sort 经典排序算法 - 梳排序Comb sort 经典排序算法 - 耐心排序Patience Sorting 经典排序算法 - 珠...
1. 冒泡排序(Bubble Sort) def bubble_sort(arr): n = len(arr) for i in range(n): for j in range(0, n-i-1): ...7. 堆排序(Heap Sort) 8. 计数排序(Counting Sort) 解压密码 douge
最大堆排序(MaxHeap Sort)是一种基于比较的排序算法,它利用了数据结构中的最大堆特性来实现排序。最大堆是一种特殊的二叉堆,每个父节点的值都大于或等于其子节点的值,通常以数组的形式存储。下面将详细介绍最大...
1. 冒泡排序(Bubble Sort) ...6.堆排序(Heap Sort) 7. 计数排序(Counting Sort) 8. 桶排序(Bucket Sort) 9. 基数排序(Radix Sort) 10. 希尔排序(Shell Sort) 解压密码 douge