王道考研数据结构课后题代码题(2026版)——排序部分

一、前言

       本合集以王道考研《数据结构》辅导书(2026版)课后习题代码题部分为参考依据,给出课后习题代码题的可执行代码的实现,本合集使用编程语言以C/C++语言为主,也不限于使用Python和Java语言,本套合计代码由作者参考网络或部分《数据结构》书籍自主编码而成,既作为本人考研路上练习记录的办法,也为广大有需要的CSDN的伙伴们提供参考,若有鄙陋不足之处,请诸位大佬批评指教,在此万分感谢!

二、题目

题目1、给出关键字序列{4,5,1,2,6,3)的直接插入排序过程.(王道课后习题综合应用题8.2.4-01)

(一)直接插入排序算法思想

  1. 初始假设 :将数组的第一个元素视为一个有序序列,而剩下的元素视为无序序列。

  2. 逐个插入 :从第二个元素开始,依次将每个元素与前面的有序序列中的元素进行比较。具体来说,将当前元素与有序序列中的元素从后往前依次比较,找到第一个比它小的元素的位置,然后将当前元素插入到该位置之后,从而将有序序列的长度增加 1。

  3. 重复过程 :重复上述步骤,直到所有元素都插入到有序序列中,完成整个数组的排序。

(二)可执行C++代码

#include<iostream>
#include<vector>
using namespace std;
vector<int> num = {4,5,1,2,6,3};//直接插入排序算法---wandao26--8.2.4-01
void InsertSort(vector<int> &num)
{int n = num.size();int i,j,temp,count=1;bool flag = false; for(i=1;i<n;i++){if(num[i]<num[i-1]){flag = true;temp = num[i];for(j=i-1;j>=0&&temp<num[j];--j) num[j+1]=num[j];num[j+1]=temp; }printf("第%d趟排序后的序列为:\n",count);for(int k=0;k<num.size();k++) printf("%d ",num[k]);cout<<endl;count++;}	
} 
int main()
{InsertSort(num);printf("完全排序后的序列为:\n");for(int m=0;m<num.size();m++){printf("%d ",num[m]);}return 0;
}
附:运行结果截图

(三)代码具体实现说明

  1. 初始数组{4,5,1,2,6,3}

  2. 第 1 趟排序

    • 比较 54,发现 5 不小于 4,不进行插入操作,所以数组仍为 {4,5,1,2,6,3},但没有输出第 1 趟排序结果。

  3. 第 2 趟排序

    • 比较 15,发现 1 小于 5,触发插入操作。

    • 1 插入到合适的位置,得到数组 {4,1,5,2,6,3}

    • 输出第 1 趟排序后的序列为:4 1 5 2 6 3

  4. 第 3 趟排序

    • 比较 25,发现 2 小于 5,触发插入操作。

    • 2 插入到合适的位置,得到数组 {4,1,2,5,6,3}

    • 输出第 2 趟排序后的序列为:4 1 2 5 6 3

  5. 第 4 趟排序

    • 比较 65,发现 6 不小于 5,不进行插入操作,数组仍为 {4,1,2,5,6,3},所以输出第 3 趟排序后的序列为:4 1 2 5 6 3

  6. 第 5 趟排序

    • 比较 36,发现 3 小于 6,触发插入操作。

    • 3 插入到合适的位置,得到数组 {4,1,2,3,5,6}

    • 输出第 4 趟排序后的序列为:4 1 2 3 5 6

  7. 最终排序结果 :完全排序后的序列为 {1,2,3,4,5,6}

题目2、给出关键字序列(50,26,38,80,70,90,8,30,40,20)的希尔排序过程(取增量序列为d= (5,3,1}),排序结果为从小到大排列).(王道课后习题综合应用题8.2.4-02)

(一)希尔排序算法思想

  1. 分组:将数组按特定间隔(增量,如n/2, n/4...1)分成多个子序列,每个子序列内的元素间隔相同;
  2. 子序列插入排序:对每个子序列分别进行插入排序,使数组逐渐 “基本有序”;
  3. 缩小间隔:逐步减小间隔至 1,最终对整个数组进行一次插入排序(此时数组接近有序,效率高)。
    通过减少逆序对数量,希尔排序比直接插入排序更高效,适用于中等规模数据。

(二)可执行C++代码

#include<iostream>
#include<vector>
using namespace std;//希尔排序算法---wandao26--8.2.4-02
void ShellSort(vector<int> &num)
{int n = num.size();int d[]={5,3,1};int i,j,k,index,count=1;//count 用于记录排序趟数for(index=0;index<3;index++)//遍历增量序列数组d,依次取出每个增量值{k = d[index];for(i=k;i<num.size();i++){int temp = num[i];j = i;while(j>=k&&temp<num[j-k])//在已排序的序列中找到插入位置,判断temp是否小于j-k索引处的元素{num[j]=num[j-k];//将j-k索引处的元素向后移动一位j-=k;}num[j] = temp; //将临时变量 temp 中存储的元素插入到找到的位置}printf("第%d趟排序后的序列为:\n",count);for(int x=0;x<num.size();x++) printf("%d ",num[x]);cout<<endl;count++;}
} 
int main()
{vector<int> num = {50,26,38,80,70,90,8,30,40,20};ShellSort(num);printf("完全排序后的序列为:\n");for(int m=0;m<num.size();m++){printf("%d ",num[m]);}return 0;
}
附:运行结果截图

(三)代码具体实现说明

  1. 初始数组{50,26,38,80,70,90,8,30,40,20}

  2. 第一趟排序(增量 5)

    • 按照增量 5 将数组分为 5 个子序列,对每个子序列进行直接插入排序。

    • 排序后的数组为 {50,8,30,40,20,90,26,38,80,70}

    • 输出第 1 趟排序后的序列为:50 8 30 40 20 90 26 38 80 70

  3. 第二趟排序(增量 3)

    • 按照增量 3 将数组分为 3 个子序列,对每个子序列进行直接插入排序。

    • 排序后的数组为 {26,8,30,40,20,80,50,38,90,70}

    • 输出第 2 趟排序后的序列为:26 8 30 40 20 80 50 38 90 70

  4. 第三趟排序(增量 1)

    • 按照增量 1 将整个数组作为一个子序列,进行直接插入排序。

    • 排序后的数组为 {8,20,26,30,38,40,50,70,80,90}

    • 输出第 3 趟排序后的序列为:8 20 26 30 38 40 50 70 80 90

  5. 最终排序结果 :完全排序后的序列为 {8,20,26,30,38,40,50,70,80,90}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/79350.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AVFormatContext 再分析零

随着对于AVFormatContext 各个参数的学习&#xff0c;逐渐可以从 整体架构上 再认识一下 AVFormatContext 了。 还是从解封装的第一步开始。 int avformat_open_input(AVFormatContext **ps, const char *url, ff_const59 AVInputFormat *fmt, AVDictionary **options); 实际上…

uniapp打包apk详细教程

目录 1.打apk包前提条件 2.获取uni-app标识 3.进入dcloud开发者后台 4.开始打包 1.打apk包前提条件 1.在HBuilderX.exe软化中&#xff0c;登录自己的账号 2.在dcloud官网&#xff0c;同样登录自己的账号。没有可以免费注册。 2.获取uni-app标识 获取方法&#xff1a;点…

Vue2 和 Vue3 的核心区别

1. 响应式原理&#xff1a;从「手动挡」到「自动挡」 Vue2&#xff1a; 使用 Object.defineProperty 监听数据变化&#xff0c;但无法检测新增属性和数组索引修改&#xff0c;需要借助 Vue.set。 // Vue2 中修改数组元素不会触发视图更新 this.list[0] 新值; // ❌ 不…

EMMC存储性能测试方法

记于 2022 年 9 月 15 日 EMMC存储性能测试方法 - Wesley’s Blog 参考Android-emmc性能测试 | 一叶知秋进行实践操作 dd 命令 页面缓存 为了测试 emmc 的真实读写性能&#xff0c;我们需要先把页面缓存给清理&#xff1a; echo 1 > /proc/sys/vm/drop_caches console:…

软件管理(安装方式)

1.rpm安装 1.1.rpm介绍 rpm软件包名称: 软件名称 版本号(主版本、次版本、修订号) 操作系统 -----90%的规律 举例:openssh-6.6.1p1-31.el7.x86_64.rpm 数字是版本号:第一位主版本号,第二位次版本号,带横杠的是修订号, el几---操作系统的版本。 #用rpm安装需要考虑如下信…

OnlyOffice Document Server 源码调试指南-ARM和x86双模式安装支持

在ARM64架构下创建的ONLYOFFICE源码调试容器具有显著优势。该容器基于官方Document Server镜像构建&#xff0c;通过集成Git、Python和Node.js等工具链&#xff0c;实现跨平台环境一致性&#xff0c;确保ARM设备的兼容性。容器化隔离消除了依赖冲突&#xff0c;支持快速部署到边…

oracle 数据库查询指定用户下每个表占用空间的大小,倒序显示

oracle 查询指定用户下每个表占用空间的大小&#xff0c;倒序显示 使用场景&#xff1a;数据分析&#xff1b;导出医院正式库到开发环境时&#xff0c;查询出占用表空间高的业务表、导出时排除该表 在Oracle数据库中&#xff0c;要查询指定用户下每个表占用空间的大小并以倒序…

归并排序【逆序对】

目录 归并排序原理 逆序对 归并排序 主要利用分治思想&#xff0c;时间复杂度O(nlogn) 原理 1.对数列不断等长拆分&#xff0c;直到一个数的长度。2.回溯时&#xff0c;按升序合并左右两段。3.重复以上两个过程&#xff0c;直到递归结束。 合并 1.i&#xff0c;j分别指向a的…

AI 与生物技术的融合:开启精准医疗的新纪元

在科技飞速发展的今天&#xff0c;人工智能&#xff08;AI&#xff09;与生物技术的融合正在成为推动医疗领域变革的重要力量。精准医疗作为现代医学的重要发展方向&#xff0c;旨在通过深入了解个体的基因信息、生理特征和生活方式&#xff0c;为患者提供个性化的治疗方案。AI…

对比表格:数字签名方案、密钥交换协议、密码学协议、后量子密码学——密码学基础

文章目录 一、数字签名方案1.1 ECDSA&#xff1a;基于椭圆曲线的数字签名算法1.2 EdDSA&#xff1a;Edwards曲线数字签名算法1.3 RSA-PSS&#xff1a;带有概率签名方案的RSA1.4 数字签名方案对比 二、密钥交换协议2.1 Diffie-Hellman密钥交换2.2 ECDH&#xff1a;椭圆曲线Diffi…

Linux 进程间通信(IPC)详解

进程间通信&#xff08;IPC&#xff09;深入解析 一、进程间通信概述 在操作系统里&#xff0c;不同进程间常常需要进行数据交换、同步协调等操作&#xff0c;进程间通信&#xff08;Inter - Process Communication&#xff0c;IPC&#xff09;机制应运而生。在Linux系统中&a…

深度解析ComfyUI的使用

一、ComfyUI 概述 ComfyUI 本质上是一个专为 AI 绘画爱好者和专业人士打造的用户界面工具&#xff0c;它的核心作用是将复杂的 AI 绘画生成过程以直观的方式呈现给用户。与传统的图像生成工具不同&#xff0c;ComfyUI 借助其独特的节点化工作流系统&#xff0c;把深度学习模型…

模型测试报错:有2张显卡但cuda.device_count()显示GPU卡数量只有一张

此贴仅为记录debug过程&#xff0c;为防后续再次遇见 问题 问题情境 复现文章模型&#xff0c;使用GPU跑代码&#xff0c;有两张GPU&#xff0c;设置在 cuda: 1 上跑 问题描述 在模型测试加载最优模型时报错&#xff1a;torch.cuda.device_count()显示GPU卡数量只有一张&…

【计网】认识跨域,及其在go中通过注册CORS中间件解决跨域方案,go-zero、gin

一、跨域&#xff08;CORS&#xff09;是什么&#xff1f; 跨域&#xff0c;指的是浏览器出于安全限制&#xff0c;前端页面在访问不同源&#xff08;协议、域名、端口任一不同&#xff09;的后端接口时&#xff0c;会被浏览器拦截。 比如&#xff1a; 前端地址后端接口地址是…

内存性能测试方法

写于 2022 年 6 月 24 日 内存性能测试方法 - Wesley’s Blog dd方法测试 cat proc/meminfo console:/ # cat proc/meminfo MemTotal: 3858576 kB MemFree: 675328 kB MemAvailable: 1142452 kB Buffers: 65280 kB Cached: 992252 …

AVFormatContext 再分析二

说明 &#xff1a;将 avfromatContext 的变量依次打印分析&#xff0c;根据ffmpeg 给的说明&#xff0c;猜测&#xff0c;结合网上的文章字节写测试代码分析二。 37 AVInputFormat *iformat; /** * The input container format. * * Demuxing only, set by avfo…

深入了解Linux系统—— 进程优先级

前言 我们现在了解了进程是什么&#xff0c;进程状态表示什么 &#xff0c;我们现在继续来了解进程的属性 —— 进程优先级 进程执行者 在了解进程优先级之前&#xff0c;先来思考一个问题&#xff1a;在我们进行文件访问操作时&#xff0c;操作系统是如何直到我们是谁&#x…

Expected SARSA算法详解:python 从零实现

&#x1f9e0; 向所有学习者致敬&#xff01; “学习不是装满一桶水&#xff0c;而是点燃一把火。” —— 叶芝 我的博客主页&#xff1a; https://lizheng.blog.csdn.net &#x1f310; 欢迎点击加入AI人工智能社区&#xff01; &#x1f680; 让我们一起努力&#xff0c;共创…

1penl配置

好的&#xff0c;根据您提供的 1pctl 命令输出信息&#xff0c;我们来重新依次回答您的所有问题&#xff1a; 第一&#xff1a;1Panel 怎么设置 IP 地址&#xff1f; 根据您提供的 user-info 输出&#xff1a; 面板地址: http://$LOCAL_IP:34523/93d8d2d705 这里的 $LOCAL_I…

链表的回文结构题解

首先阅读题目&#xff1a; 1.要保证是回文结构 2.他的时间复杂度为O(n)、空间复杂度为O(1) 给出思路: 1.首先利用一个函数找到中间节点 2.利用一个函数逆置中间节点往后的所有节点 3.现在有两个链表&#xff0c;第一个链表取头节点一直到中间节点、第二个链表取头结点到尾…