`

排序算法java实现堆排序

 
阅读更多

 

public class HeapSort {

//堆排序:

//基本思想:

//首先要了解堆这种数据结构:

//堆是实质上是一个满足如下条件的完全二叉树:树中任意非叶节点的关键字均不大于(或不小于)其左右孩子节点的关键字,即:

//给定关键字数列:T1,T2,...,Tn,

//当且仅当数列满足如下性质:(1)Ti<=T2i且Ti<=T2i+1或者(2)Ti>=T2i且Ti>=T2i+1(1<=i<=n/2取最小值)

//堆分为大根堆和小根堆:

//大根堆是指根节点的关键字是所有堆节店关键字中的最大者(升序)

//小根堆是指:根节点的关键字是所有节点关键字的最小者(降序)

 

//堆排序顾名思义就是基于堆这种数据结构进行排序,在排序过程中,将数列看成是一颗完全二叉树的顺序存储结构,利用完全二叉树中

//双亲节点和孩子节点之间的关系,在当前无序区中选择关键字最大或最小的记录。

 

//利用小根堆排序的步骤:

//1.构造一个大根堆

//2.将当前无序的堆顶记录T1和该区间的最后一个记录交换,然后将新的无序区调整为堆(称为重建堆)

//3.重复上述操作



 

 

//平均时间复杂度:O(nlogn)

//由于每次重新恢复堆的时间复杂度为O(logn),共n-1次重新恢复堆的操作,

//再加上前面简历堆时n/2次向下调整,每次调整的时间复杂度也为O(logn),两次操作时间相加还是O(nlogn)

 

 

 

public static void main(String[] args) {

int[] arr = new int[]{6,2,4,1,9,3,6,7,0};

System.out.println("排序前=====");

print(arr);

System.out.println("");

System.out.println("排序后");

heapSort(arr,arr.length);

print(arr);

}

 

public static void heapSort(int[] arr,int n) {

 

int temp = 0;

MakeMinHeap(arr, n);

for(int i=n-1; i>0; i--){

temp = arr[0];

arr[0] = arr[i];

arr[i] = temp;

MinHeapFixDown(arr, 0, i);

}

 

}

 

//构建最小堆

public static void MakeMinHeap(int[] arr,int n){

for(int i=(n-1)/2; i>=0; i--){

MinHeapFixDown(arr,i,n);

}

}

//从节点i开始调整,n为节点总数,从0开始

public static void MinHeapFixDown(int[] arr,int i,int n){

 

int j = 2*i+1;//子节点

int temp = 0;

 

while(j<n){//在左右子节点中寻找最小的

if(j+1<n && arr[j+1]<arr[j]){

j++;

}

 

if(arr[i] <= arr[j])

break;

 

//较大节点下移

temp = arr[i];

arr[i] = arr[j];

arr[j] = temp;

 

i = j;

j = 2*i+1;

 

}

}

 

 

public static void print(int[] arr){

for(int i=0; i<arr.length; i++){

System.out.print(arr[i]+",");

}

}

}

 

  • 大小: 178.4 KB
分享到:
评论

相关推荐

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

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

    堆排序算法(java)

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

    堆排序算法 java

    堆排序算法 java

    各种排序算法java实现

    在Java编程语言中,排序算法是数据结构与算法学习中的重要组成部分。...在Java开发中,除了这些基础排序算法,还有更高级的排序算法如快速排序、归并排序、堆排序等,它们在效率和复杂度上都有更深入的研究和应用。

    常见的七大排序算法Java实现.zip

    本压缩包"常见的七大排序算法Java实现.zip"包含了七种经典的排序算法在Java语言中的实现。尽管文件列表中并未明确列出每种排序算法的名称,但根据常规,这七大排序算法可能包括冒泡排序、插入排序、选择排序、快速...

    排序算法JAVA实现,eclipse+txt

    Java作为一种广泛应用的编程语言,提供了丰富的工具和技术来实现各种排序算法。本资料包包含了一个基于Java的排序算法实现,以及Eclipse工程文件,方便开发者在Eclipse集成开发环境中进行调试和学习。 1. **冒泡...

    常用排序算法java演示

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

    内部排序算法java实现

    这里我们将深入探讨Java实现的几种内部排序算法,包括希尔排序、快速排序、堆排序、归并排序、冒泡排序、插入排序和选择排序。 首先,希尔排序是一种基于插入排序的算法,通过将原始数组分解成多个子序列来提高效率...

    堆排序之Java实现

    在实际应用中,Java的`PriorityQueue`可以提供更简洁的实现方式,但手动实现有助于理解堆排序的工作原理。 总结起来,堆排序是一种高效的排序算法,时间复杂度为O(n log n),空间复杂度为O(1)。在Java中,我们可以...

    JAVA写的6种内部排序算法简单实现

    这里我们主要探讨的是使用Java语言实现的六种内部排序算法。内部排序是指在内存中完成的排序过程,它不涉及外部存储器交互。这六种排序算法可能包括常见的快速排序、归并排序、插入排序、选择排序、冒泡排序以及堆...

    常用各种排序算法Java的实现_差不多了__.rar

    本资源"常用各种排序算法Java的实现_差不多了__.rar"显然是一个包含了各种经典排序算法Java实现的压缩文件,对于学习和理解这些算法的开发者来说极具价值。 首先,我们来概述一下常见的排序算法: 1. 冒泡排序:是...

    堆排序12.java 使用java代码实现

    堆排序12.java 使用java代码实现堆排序12.java 使用java代码实现堆排序12.java 使用java代码实现堆排序12.java 使用java代码实现堆排序12.java 使用java代码实现堆排序12.java 使用java代码实现堆排序12.java 使用...

Global site tag (gtag.js) - Google Analytics