王道考研數據結構課后題代碼題(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.pswp.cn/pingmian/79350.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/79350.shtml
英文地址,請注明出處:http://en.pswp.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;第一個鏈表取頭節點一直到中間節點、第二個鏈表取頭結點到尾…