25版王道数据结构课后习题详细分析 第八章 8.2 插入排序

本文主要是介绍25版王道数据结构课后习题详细分析 第八章 8.2 插入排序,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、单项选择题

————————————————————

————————————————————

解析:直接插入排序在最坏的情况下要做n(n-1)/2次关键字的比较,当n=5时,
关键字的比较次数为10。注意不考虑与哨兵的比较。
正确答案:

————————————————————

————————————————————

解析:由于序列初始基本有序,因此使用直接插入排序算法的时间复杂度接近O(n),而使用其他算法的时间复杂度均大于O(n)。


正确答案:

————————————————————

————————————————————

解析:由于大部分图书都是有序的,因此采用直接插入排序比较合适。


正确答案:

————————————————————

————————————————————

解析:待排序表为反序时,直接插入排序需要进行n(n-1)/2次比较(从前往后依次需要比较1,2…,n-1次):待排序表为正序时,只需进行n-1次比较。注意本题不考虑与哨兵的比较。


正确答案:

————————————————————

————————————————————

解析:冒泡排序和选择排序经过两趟排序后,应该有两个最大(或最小)元素放在其最终位置:插入排序经过两趟排序后,前三个元素应该是局部有序的。只可能是插入排序。


正确答案:

————————————————————

————————————————————

解析:越接近正序的序列,直接插入排序的比较次数就越少。B和C是比较接近正序的,然后分别判断两个序列的比较次数,以B为例:第一趟,插入32,比较1次;第二趟,插入46,比较1次;第三趟,插入40,因为40比46小但比32大,所以比较2次;第四趟,插入80,比较1次;第五趟,插入69,比较2次;以此类推,共比较9次。同理求出C的比较次数为11次。所以选B项。


正确答案:

————————————————————

————————————————————

解析:在直接插入排序中,若待排序列中的最后一个元素应插入表中的第一个位置,则前面的有序子序列中的所有元素都不在最终位置上。


正确答案:

————————————————————

————————————————————

解析:希尔排序是对直接插入排序算法改进后提出来的,本质上仍属于插入排序的范畴。


正确答案:

————————————————————

————————————————————

解析:希尔排序将序列分成若干组,记录只在组内进行交换。由观察可知,经过一趟后9和-1交换,和4交换,可知增量为4。


正确答案:

————————————————————

————————————————————

解析:前两个元素已经局部有序,很明显一趟直接插入排序算法有效。再排除其他算法即
l可。


正确答案:

————————————————————

————————————————————

解析:增量为4意味着所有相距为4的记录构成一组,然后在组内进行直接插入排序,
经观察,只
有A项满足要求。


正确答案:

————————————————————

————————————————————

解析:第一趟:EE为一组,比较;AS为一组,比较;ST为一组,比较;YI为一组,比较后交换;QO为一组,比较后交换;UN为一组,比较后交换,结果为EASIONESTYQU。第二趟:EEY为一组,用直接插入排序需要依次比较Ⅰ和E、E和I、E和E、Y和I;AOSQ为一组,依次比较О和A、S和O、Q和S、Q和O;SNTU为一组,依次比较N和S、T和S、U和T。第一趟比较次数为6,第二趟比较次数为11,总比较次数为17。


正确答案:

————————————————————

————————————————————

解析:第一趟增量d=5,第一趟排序后,结果为2,11,5,1,8,9,24,7,34,51,13,77,56。第二趟增量d=3,第二趟排序后,结果为1,7,5,2,8,9,24,11,34,51,13,77,56。


正确答案:

————————————————————

————————————————————

解析:虽然折半插入排序是对直接插入排序的改进,但它改进的只是比较的次数,而移动次数未发

生变化,时间复杂度仍为O(2)。

正确答案:

————————————————————

————————————————————

解析:因为希尔排序是基于插入排序算法提出的,所以它不一定在每趟排序过程后将某一元素放置到最终位置上。


正确答案:

————————————————————

————————————————————

解析:希尔排序是一种复杂的插入排序算法,它是一种不稳定的排序算法。


正确答案:

————————————————————

————————————————————

解析:基于插入、交换、选择的三类排序算法中,通常简单方法是稳定的(直接插入、折半插入、冒泡),但有一个例外就是简单选择,复杂方法都是不稳定的(希尔排序、快速排序、堆排序)。


正确答案:

————————————————————

————————————————————

解析:折半插入排序与直接插入排序都将待插入元素插入前面的有序子表,区别是:确定当前记录在前面有序子表中的位置时,直接插入排序采用顺序查找法,而折半插入排序采用折半查找法。排序的总趟数取决于元素个数n,两者都是n-1趟。元素的移动次数都取决于初始序列,两者相同。使用辅助空间的数量也都是O(1)。折半插入排序的比较次数与序列初态无关,时间复杂度为为O(nlogzn);而直接插入排序的比较次数与序列初态有关,时间复杂度为O(n)一O(n2)。


正确答案:

————————————————————

————————————————————

解析:首先,第二个元素为1,是整个序列中的最小元素,可知该希尔排序为从小到大排序。然后考虑增量问题,若增量为2,则第1+2个元素4明显比第1个元素9要小,排除A。若增量为3,则第i,i+3,i+6 (i=1,2,3)个元素都为有序序列,符合希尔排序的特点。若增量为4,则第1个元素9比第1+4个元素7要大,排除C。若增量为5,则第1个元素9比第1+5个元素8要大,排除D。


正确答案:

————————————————————

————————————————————

解析:希尔排序的思想是:先将待排元素序列分割成若干子序列(由相隔某个“增量”的元素组成),分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本有序增量足够小)时,再对全体元素进行一次直接插入排序。


正确答案:

————————————————————

————————————————————

解析:


正确答案:

二、综合应用题

————————————————————

————————————————————

解答:

————————————————————

————————————————————

解答:

这篇关于25版王道数据结构课后习题详细分析 第八章 8.2 插入排序的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1142245

相关文章

【C++ Primer Plus习题】13.4

大家好,这里是国中之林! ❥前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。有兴趣的可以点点进去看看← 问题: 解答: main.cpp #include <iostream>#include "port.h"int main() {Port p1;Port p2("Abc", "Bcc", 30);std::cout <<

【数据结构】——原来排序算法搞懂这些就行,轻松拿捏

前言:快速排序的实现最重要的是找基准值,下面让我们来了解如何实现找基准值 基准值的注释:在快排的过程中,每一次我们要取一个元素作为枢纽值,以这个数字来将序列划分为两部分。 在此我们采用三数取中法,也就是取左端、中间、右端三个数,然后进行排序,将中间数作为枢纽值。 快速排序实现主框架: //快速排序 void QuickSort(int* arr, int left, int rig

6.1.数据结构-c/c++堆详解下篇(堆排序,TopK问题)

上篇:6.1.数据结构-c/c++模拟实现堆上篇(向下,上调整算法,建堆,增删数据)-CSDN博客 本章重点 1.使用堆来完成堆排序 2.使用堆解决TopK问题 目录 一.堆排序 1.1 思路 1.2 代码 1.3 简单测试 二.TopK问题 2.1 思路(求最小): 2.2 C语言代码(手写堆) 2.3 C++代码(使用优先级队列 priority_queue)

《数据结构(C语言版)第二版》第八章-排序(8.3-交换排序、8.4-选择排序)

8.3 交换排序 8.3.1 冒泡排序 【算法特点】 (1) 稳定排序。 (2) 可用于链式存储结构。 (3) 移动记录次数较多,算法平均时间性能比直接插入排序差。当初始记录无序,n较大时, 此算法不宜采用。 #include <stdio.h>#include <stdlib.h>#define MAXSIZE 26typedef int KeyType;typedef char In

【408数据结构】散列 (哈希)知识点集合复习考点题目

苏泽  “弃工从研”的路上很孤独,于是我记下了些许笔记相伴,希望能够帮助到大家    知识点 1. 散列查找 散列查找是一种高效的查找方法,它通过散列函数将关键字映射到数组的一个位置,从而实现快速查找。这种方法的时间复杂度平均为(

【JavaScript】LeetCode:21-25

文章目录 21 最大子数组和22 合并区间23 轮转数组24 除自身以外数组的乘积25 缺失的第一个正数 21 最大子数组和 贪心 / 动态规划贪心:连续和(count)< 0时,放弃当前起点的连续和,将下一个数作为新起点,这里提供使用贪心算法解决本题的代码。动态规划:dp[i]:以nums[i]为结尾的最长连续子序列(子数组)和。 dp[i] = max(dp[i - 1]

浙大数据结构:树的定义与操作

四种遍历 #include<iostream>#include<queue>using namespace std;typedef struct treenode *BinTree;typedef BinTree position;typedef int ElementType;struct treenode{ElementType data;BinTree left;BinTre

Python 内置的一些数据结构

文章目录 1. 列表 (List)2. 元组 (Tuple)3. 字典 (Dictionary)4. 集合 (Set)5. 字符串 (String) Python 提供了几种内置的数据结构来存储和操作数据,每种都有其独特的特点和用途。下面是一些常用的数据结构及其简要说明: 1. 列表 (List) 列表是一种可变的有序集合,可以存放任意类型的数据。列表中的元素可以通过索

浙大数据结构:04-树7 二叉搜索树的操作集

这道题答案都在PPT上,所以先学会再写的话并不难。 1、BinTree Insert( BinTree BST, ElementType X ) 递归实现,小就进左子树,大就进右子树。 为空就新建结点插入。 BinTree Insert( BinTree BST, ElementType X ){if(!BST){BST=(BinTree)malloc(sizeof(struct TNo

第六章习题11.输出以下图形

🌏个人博客:尹蓝锐的博客 希望文章能够给到初学的你一些启发~ 如果觉得文章对你有帮助的话,点赞 + 关注+ 收藏支持一下笔者吧~ 1、题目要求: 输出以下图形