首页 > 编程知识 正文

堆排序算法过程图解(什么是堆排序算法)

时间:2023-05-06 12:58:54 阅读:76116 作者:2856

本论文的例子论述了Java排序算法总结的累积排序。 分享给大家参考。 具体分析如下:

1991年计算机先驱奖获得者、斯坦福大学计算机科学系教授kwdHD(Robertw.Floyd )和威廉姆斯)于1964年共同发明了著名的堆排序算法(Heap Sort )。 本文主要介绍用Java实现。

“堆排序”(Heapsort )是一种利用数据结构“堆树”(堆)设计的排序算法,通过数组特征可以快速找到指定索引的元素。 堆栈排序是一种不稳定的排序方法,辅助空间为o(1),最大时间复杂度为o ) O(nlog2n ),堆栈排序的堆栈平均性能接近最差性能。

堆排序利用了萝卜堆(或萝卜堆)堆上记录关键字最大(或最小)的特点,从而使在当前无序区域中选择最大(或最小)关键字的记录变得简单。

(1)萝卜山系列化基本思想

首先将初始文件R[1.n]组成一个大根山,该山是初始无序区

通过交换关键字最大的记录R[1] (即堆上)和无序区域的最后一条记录R[n],得到新的无序区域R[1.n-1]和有序区域R[n],并且r [1. n-1 ].kkk

更换后的新路线R[1]可能违反堆的性质,需要将当前的无序区R[1.n-1]调整为堆。 然后,再次交换R[1.n-1]中关键字最大的记录R[1]和该区间的最后的记录R[n-1],由此生成新的无序区域R[1.n-2]和有序区域R[n-1.n]

.

直到无序区只有一个要素。

)2)萝卜山排序算法的基本操作:

初始化操作:将R[1.n]构建为初始堆;

每次排序的基本操作:交换当前无序区堆上的记录R[1]和该区间的最后一条记录,将新的无序区调整为堆(也称为重建堆)。

注意:

n-1次排序,选择大的n-1个关键词,就可以依次增加文件。

用小根山排序类似于利用大根山,但排序结果减少且有序。 累计排序和直接选择排序相反。 在任何时刻,无序区域始终位于有序区域之前,有序区域的原始向量末尾从后向前逐步扩展到整个向量。

代码实现:

公共类测试{

公共静态int [ ] heap={ 10,32,1,9,5,7,12,0,4,3 };

//预设数据数组

publicstaticvoidmain (string args [ ] ) {

int i; //循环计数变量

int Index=Heap.length; //数据索引变量

System.out.print (排序前: );

for(I=1; I索引- 1; I )

system.out.printf('%3s ',Heap );

System.out.println (' ';

heapsort (索引- 2; //累计排序

System.out.print (排序后: );

for(I=1; I索引- 1; I )

system.out.printf('%3s ',Heap );

System.out.println (' ';

}

//*

*创建堆

*/

publicstaticvoidcreateheap (int根,int索引)。

int i,j; //循环计数变量

int Temp; //临时变量

完成; //判断堆是否完成

j=2*路线; //子节点索引

temp=heap [根]; 临时保存Heap的根值

Finish=0; //默认堆创建未完成

wile(j=Indexfinish==0) {

查找if(jindex )//最大的子节点

if(heap[j]heap[j1] ) ) ) ) ) ) )。

j;

if(temp=heap[j] ) ) )。

Finish=1; //堆创建完成

else {

Heap[j/2]=Heap[j]; //父节点=当前节点

j=2 * j;

}

}

Heap[j/2]=Temp; //父节点=根值

}

publicstaticvoidheapsort (索引)。

int i,j,Temp;

//将二叉树改为Heap

for(I=)索引/2; i=1; I----)

创建帮助(I,Index );

//开始堆积排序

for (I=索引- 1; i=1; I---- ) {

Temp=Heap; //Heap的根值和最后一个值互换

Heap=Heap[1];

Heap[1]=Temp;

创建帮助(1,I ); //针对剩馀数值重建堆

System.out.print ('正在排序: );

for(j=1; j=索引; j )

system.out.printf('%3s ',Heap[j] );

System.out.println (' ';

}

}

}

堆可以被认为是树,其中,堆中节点的高度可以定义为从自节点到叶节点的最长简单下降路径上的数目; 将堆的高度定义为树根的高度。 可见堆栈结构上一些基本操作的执行时间最多与树的高度成比例,为O(lgn )。 通过阅读正文,希望对你有帮助。

本文希望对大家的java编程有所帮助。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。