//author:lilywangcn
public class HeapSort {
private static int[] array=new int[]{10,30,20,4,9,-1,10,6,15};
/**
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
print();
buildsort();
print();
}
public static void buildHeap(){
for(int i=array.length/2-1; i>=0; i--){
heapify(i,array.length-1);
}
}
private static void buildsort(){
buildHeap();
for(int last=array.length-1;last>=0;last--){
int tmp=array[0];
array[0]=array[last];
array[last]=tmp;
heapify(0,last-1);
}
}
private static void heapify(int top,int end){
int large=top*2+1;
int tmp=array[top];
while(large<=end){
if(large<end){
if(array[large]<array[2*top+2])
large=large + 1;
}
if(tmp>array[large]) break;
else{
array[top]=array[large];
array[large]=tmp;
top=large;
large=2*top+1;
}
print();
}
}
private static void print(){
for(int i=0;i<array.length;i++){
System.out.print(array[i]+" ");
}
System.out.println("");
}
}
算法复杂度:O(nlogn),算法不稳定
运行结果:
10 30 20 4 9 -1 10 6 15
10 30 20 15 9 -1 10 6 4
30 10 20 15 9 -1 10 6 4
30 15 20 10 9 -1 10 6 4
20 15 4 10 9 -1 10 6 30
20 15 10 10 9 -1 4 6 30
15 6 10 10 9 -1 4 20 30
15 10 10 6 9 -1 4 20 30
10 4 10 6 9 -1 15 20 30
10 9 10 6 4 -1 15 20 30
10 9 -1 6 4 10 15 20 30
9 4 -1 6 10 10 15 20 30
9 6 -1 4 10 10 15 20 30
6 4 -1 9 10 10 15 20 30
4 -1 6 9 10 10 15 20 30
-1 4 6 9 10 10 15 20 30
分享到:
相关推荐
堆排序是一种基于比较的排序算法,它通过构建和维护一个最大堆或最小堆来实现排序。在C语言中,我们可以自定义函数来实现这个过程。下面是对标题和描述中涉及的堆排序知识点的详细说明: 1. **最大堆**:在堆排序中...
堆排序的核心思想是利用堆的性质,通过一系列操作将无序序列构造成一个最大堆,这样堆顶元素就是序列中的最大值。将最大元素与堆的最后一个元素交换并移除堆顶元素,然后对剩余元素重新调整为最大堆,重复这个过程...
在堆排序中,首先需要构建一个堆,然后通过一系列操作将堆中的元素按照从大到小或从小到大的顺序排列。堆是一种特殊的完全二叉树,可以实现快速地在堆顶插入元素和删除最大(或最小)元素的操作。 堆可以分为两种...
本实验全集涵盖了多个重要的数据结构及其相关的算法,包括链表、约瑟夫问题、KMP模式匹配、二叉排序树、llink-rlink算法、关键路径以及堆排序。以下是对这些知识点的详细解释: 1. **链表**:链表是一种线性数据...
在给定的压缩包文件中,包含了七种经典排序算法的C语言实现,这些排序算法分别是:气泡排序、插入排序、选择排序、快速排序、希尔排序、堆排序和合并排序。 气泡排序(Bubble Sort)是一种简单直观的排序方法,通过...
堆排序是一种基于比较的排序算法,它通过构建和调整二叉堆来实现数据的排序。在Java编程中,我们可以利用数组来表示堆,并通过一系列的操作将待排序的序列构建成一个大顶堆或小顶堆,然后进行交换和调整,最终达到...
例如,插入排序和选择排序适合小规模数据,冒泡排序虽然效率较低但实现简单,堆排序和快速排序在处理大规模数据时有较好性能,而基数排序则能处理非负整数排序。在实际开发中,根据具体需求选择合适的排序算法是非常...
堆排序是一种基于比较的排序算法,它通过构造一个大顶堆或小顶堆来实现排序。在C语言中,我们可以利用数组来表示堆,并通过一系列的调整操作将无序序列转化为有序序列。以下是对堆排序及其C语言实现的详细解释。 ##...
逻辑结构:描述数据元素之间的逻辑关系,如线性结构(如数组、链表)、树形结构(如二叉树、堆、B树)、图结构(有向图、无向图等)以及集合和队列等抽象数据类型。 存储结构(物理结构):描述数据在计算机中如何...
本实验报告围绕“三种平均时间复杂度为O(nlogn)的内部排序算法的实现”展开,旨在通过实践加深学生对于快速排序、堆排序以及2路归并排序的理解和应用能力。以下是针对该实验报告所涉及的核心知识点的详细解析。 ###...
- **堆排序(`heapSort`)**:此函数实现了堆排序的核心逻辑。在每次迭代过程中,都将堆顶元素与堆的最后一个元素进行交换,然后减少堆的大小,并调整堆顶元素以确保堆的性质得到恢复。 通过这种方式,我们可以看到,...
根据给定的信息,本文将对九种不同的排序算法进行详细解析:选择排序、插入排序、冒泡排序、希尔排序、快速排序、箱子排序(计数排序)、基数排序、归并排序以及堆排序。 ### 一、选择排序 选择排序的基本思想是...
在内部排序中,有六种最核心的算法,分别是插入排序、希尔排序、选择排序、冒泡排序、堆排序和快速排序。这六种算法在实际应用中各有优劣,适用于不同的场景和需求。 插入排序的基本思想是将一个记录插入到已经排好...
堆排序作为一种高效的排序算法,以其独特的堆结构和稳定的性能,在数据结构与算法领域内占有重要地位。本篇文章将详细介绍堆排序的核心概念、构建过程、优势以及应用场景,旨在为读者提供对堆排序的全面理解。 首先...
堆排序是一种基于比较的排序算法,它利用了数据结构中的“堆”这一概念。堆是一个特殊的树形数据结构,每个节点都有一个值,且满足以下性质:对于任意非叶子节点,其值都不小于(在最小堆中)或不小于(在最大堆中)...
6. **堆排序**:堆排序利用了堆这种数据结构,通过构建最大堆或最小堆,将堆顶元素与最后一个元素交换,然后调整堆,最终达到排序的目的。时间复杂度为O(nlogn)。 设计过程中,学生需要编写详细的设计说明,包括...
堆排序是利用堆这种数据结构所设计的一种排序算法,堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子节点的键值或索引总是小于(或者大于)它的父节点。 计数排序适用于一定范围内的整数排序,在这种...
堆排序过程则是通过一系列的堆顶元素与末尾元素的交换,逐步缩小堆的范围,直到整个列表有序。 具体到Python代码实现,会使用到一些内置函数和结构,比如列表(list)来表示堆,以及通过列表索引来访问父节点和子...
### 堆排序算法概述 堆排序是一种基于比较的排序技术,它利用了二叉堆的数据结构特性来高效地对数据进行排序。堆排序的基本思想是:先将待排序序列构造成一个大顶堆(或小顶堆),此时整个序列的最大值(或最小值)...