堆排序

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
25 0 1 30 2 25 3 21 4 8 5 16 6 49
树图解:
30 21
j=8; A[4]=8;
8
16
49
堆排序
一维数组:
A[1]和A[5]交换
0 1 16 2 25 3 21 4 8 5 30 6 49
树图解:
16 25 21
8
30
49
堆排序
一维数组:
HeapAdjust(A,1,4) rc=A[1]=16; j=2; A[1]=A[2]; s=2; j=4; break; A[2]=16;
8
0 1 25 2 16 3 21 4 8 5 30 6 49
树图解:
25 16 21
30
49
堆排序
一维数组:
A[1]和A[4]交换
0 1 8 2 16 3 21 4 25 5 30 6 49
树图解:
8 16 21
25
30
49
堆排序 HeapAdjust(A,1,3) rc=A[1]=8; j=2; j=j+1=3; A[1]=A[3]; s=3; A[3]=8;
30
一维数组:
0 1 21 2 30 3 49 4 25 5 16 6 8
树图解:
21 49
25
16
8
堆排序 HeapAdjust(A,1,6); rc=A[1]=21; j=2; 2<6 30<49 j+1=3; 21<49; A[1]=A[3]=49; s=j=3; j=6; 6<6 21>18; A[3]=21;
树图解:
8
堆排序结束
25
16
21
30
49
堆排序
总结: 堆排序过程: 第一步:先将整棵树排成上重下轻(升序)或上轻下重 (降序)的形式。 第二步:把根节点放到尾巴处(类似栈一样),参与 第一步的结点少了一个。重复第一步第二步直到参与的结 点只剩根节点。
堆排序代码参考
堆排序代码参考
堆排序之main函数
一维数组:
0 1 21 2 25 3 49 4 30 5 16 6 8
树图解:
21 25 30 16 8 49
堆排序之HeapSort函数
堆排序之HeapAdjust函数
堆排序
一维数组:
HeapAdjust(A,3,6); 21 rc=A[3]=49; j=2*3=6 ==m=6; 树图解: j<m ==false; rc>=A[6] ==true; break; A[3]=49;
21 16 8
一维数组:
0 1 21 2 16 3 8 4 25 5 30 6 49
树图解:
25
30
49
堆排序
一维数组:
A[1]和A[3]交换
0 1 8 2 16 3 21 4 25 5 30 6 49
树图解:
8 16 21
25
30
49
堆排序 HeapAdjust(A,1,2) rc=A[1]=8; j=2; A[1]=A[2]; A[2]=8;
堆排序
堆排序
用一维数组就能实现: 首先要知道,如果父节点的编号是j,则左孩子的编 号是2j,右孩子的编号是2j+1。 所以一维数组需要从1开始计数,从0开始计数则在 调用的时候都需要把下标加1。 升序: ①把该树弄成每一个节点都大于它的左孩子和右孩 子。 ②将根节点与最后一个结点交换,然后最后一个结 点排除在外,再次进行①步骤。 ③将根节点和倒数第二个结点交换,然后倒数第二 个结点排除在外,再次进行①步骤。 ………………………………………………………… 直到剩一个根节点的时候结束排序。
一维数组:
0 1 16 2 8 3 21 4 25 5 30 6 49
树图解:
16 8 21
25
30
49
堆排序
一维数组:
A[1]和A[2]交换
0 1 8 2 16 3 21 4 25 5 30 6 49
树图解:
8 16 21
25
30
49
堆排序 HeapAdjust(A,1,1)
一维数组:
0 1 8 2 16 3 21 4 25 5 30 6 49
0 1 2 25 3 49 4 30 5 16 6 8
21 25 30 16 8 49
堆排序 HeapAdjust(A,2,6); rc=A[2]=25; j=4; j=4<m=6; A[4]>A[5]; rc=25 < A[4]=30 A[2]=A[4]; s=j=4; j=j*2=8 > 6 A[4]=rc=25;
一维数组:
0 1 49 2 30 3 21 4 25 5 16 6 8
树图解:
49 30 21
25
16
8
堆排序ห้องสมุดไป่ตู้
一维数组:
0 1 8 2 30 3 21 4 25 5 16 6 49
A[1]和A[6]交换
树图解:
8 30 21
25
16
49
堆排序
一维数组:
HeapAdjust(A,1,5); rc=A[1]=8; A[1]=A[2]; s=2; j=4; A[2]=A[4]; s=4;
相关文档
最新文档