【数据结构与算法】内部排序课后习题

题目

下面一共有两道有关内部排序的课后习题,全部都是思路画图题并不是算法设计题故在此就一起列举出来了~


1. 以关键码序列(503,087,512,061,908,170,897,275,653,426)为例,手工执行以下排序算法,写出每一趟排序结束时的关键码状态:

  1. 直接插入排序
  2. 希尔排序(增量d[1]=5)
  3. 快速排序
  4. 堆排序

解答

1. 直接插入排序

说明:
[]里面的元素是已选择的关键码,{}里面的元素是待选择的关键码,每次会从{}里面的选第一个元素直接插入到[]里面

STEP1:
[503], {087, 512, 061, 908, 170, 897, 275, 653, 426}
STEP2:
[087, 503], {512, 061, 908, 170, 897, 275, 653, 426}
STEP3:
[087, 503, 512], {061, 908, 170, 897, 275, 653, 426}
STEP4:
[061, 087, 503, 512], {908, 170, 897, 275, 653, 426}
STEP5:
[061, 087, 503, 512, 908], {170, 897, 275, 653, 426}
STEP6:
[061, 087, 170, 503, 512, 908], {897, 275, 653, 426}
STEP7:
[061, 087, 170, 503, 512, 897, 908], {275, 653, 426}
STEP8:
[061, 087, 170, 275, 503, 512, 897, 908], {653, 426}
STEP9:
[061, 087, 170, 275, 503, 512, 653, 897, 908], {426}
STEP10:
[061, 087, 170, 275, 426, 503, 512, 653, 897, 908]


2. 希尔排序

说明:
一共进行了四次希尔排序各次的DK值分别为5、3、2、1
从排序前的第一个元素开始依次往后,跟其后面第DK个元素进行比较,小的在前面大的在后,直至后面第DK个元素不存在结束

STEP1(DK = 5):
排序前:503 087 512 061 908 170 897 275 653 426
排序后:170 087 275 061 426 503 897 512 653 908
STEP2(DK = 3)
排序前:170 087 275 061 426 503 897 512 653 908
排序后:061 087 275 170 426 503 897 512 653 908
STEP3(DK = 2)
排序前:061 087 275 170 426 503 897 512 653 908
排序后:061 087 275 170 426 503 653 512 897 908
STEP4(DK = 1)
排序前:061 087 275 170 426 503 653 512 897 908
排序后:061 087 170 275 426 503 653 512 897 908


3. 快速排序

取第一个关键码503为关键字

第一步
在这里插入图片描述
第二步
在这里插入图片描述
第三步
在这里插入图片描述
第四步
在这里插入图片描述
第五步
在这里插入图片描述
第六步
在这里插入图片描述

第七步
在这里插入图片描述
第八步
在这里插入图片描述
第九步
在这里插入图片描述
至此完成了第一次快速排序,将503作为关键词进行的快速排序,小于503均在左边,大于503的均在右边。但是左右两边是无序的由此可知要递归处理左右子序列

  • 对其左子序进行排序426 087 275 061 170 (参照上述步骤可得)
    061 087 170 275 426
  • 同理可得右子序 897 908 653 512进行递归排序后得
    512 653 897 908

由此整个排序已完成
061 087 170 275 426 512 061 087 170 275 426


4. 堆排序

初始大顶堆
在这里插入图片描述
开始进行堆排序
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


2.判断以下序列是否是最小堆?如果不是,将它调整为最小堆。

  1. {100,86,48,73,35,39,42,57,66,21}
  2. {12,70,33,65,24,56,48,92,86,33}

解答

该解答分为两个大部分,分别为序列一的解答和序列二的解答。

序列一

原序列堆图像
在这里插入图片描述
调整为最小堆后
在这里插入图片描述

序列二

原序列堆图像
在这里插入图片描述
调整为最小堆后
在这里插入图片描述


结束语

  因为是算法小菜,所以提供的方法和思路可能不是很好,请多多包涵~如果有疑问欢迎大家留言讨论,你如果觉得这篇文章对你有帮助可以给我一个免费的赞吗?我们之间的交流是我最大的动力!

猜你喜欢

转载自blog.csdn.net/Zchengjisihan/article/details/131581593