數據結構-分析期末選擇題考點(排序)

何似清歌倚桃李

一爐沈水醉紅燈

契子??


上一期給大家提供了大概會考的題型給老鐵們復習的大致思路

這一期還會是一樣,我將整理一下排序的題型以及解題方法給你們

由于時間還很多,我就慢慢總結吧,一天一章的樣子,明天總結串、后天總結圖

然后坦然的走向期末考的刑場


?我們還是先來講一下排序吧?我對這塊比較熟

排序重點考快排的方法,分析時間復雜度、穩定性

考排序的話,快排是必考的,因為太重要了

如果快排還不懂的老鐵,可以去看看我之前的文章:手撕快排(點擊鏈接即刻跳轉

我們二叉樹中不是還有個堆嗎?我遇到的題中往往是結合排序來考的 --?堆排序。題型大概就是初始化建堆。如果還有對堆了解還不夠深刻的老鐵,請看這篇文章:堆排序

然后其他的題型便是:給出一些排序考你穩定性以及時間復雜度了,這里稍微去翻一下課本就行

(1)快排(常考排完一次快排后的序列)大概率會考 == 必考

我說的都是有根據的,都是自己做到的作業題以及結合一些考試因素,所以可以選擇相信我

(2)堆排序(初始化建堆)高幾率

(3)時間復雜度、穩定性(感覺排序也少不了的一環)

(4)環境題 -- 給出一個案例讓你選擇最優排序(這個很少見,考對所有排序的概念理解,但是學校應該不會為難你吧,不放心的話可以看看)

排序的考點大概就是這些,考的不多大概就兩三道打底的樣子(一本正經的分析)

但是這分能撿就,說不定離不掛科就差這幾分呢?


廢話說完了,直接上題吧 ~

快排的模擬

我們把這一類題稱為快排的模擬,因為方法就是畫圖模擬快排的實現

以30為基準,設一組初始記錄關鍵字序列為(30,15,40,28,50,10,70)
則第一趟快速排序結果為()
A、10,28,15,30,50,40,70
B、10,15,28,30,50,40,70
C、10,28,15,30,40,50,70
D、10,15,28,30,40,50,70

我先教老鐵們模擬一遍,在公布答案:
首先說明一下快排的常識(排序思想)吧 ~ 為了以下好講(為了照顧小白)

快排思想

任取待排序元素序列中的某元素作為?基準值?,按照該排序將待排序集合分割成兩子序列,左子序列中所有元素均?小于?基準值,右子序列中所有元素均?大于?基準值,然后最左右子序列重復該過程,直到所有元素都排列在相應位置上為止

而我們之前的方法則是雙指針思想:模擬兩個指針 leftright 分別指向首尾位置,然后 right 先找比基準小的元素,left 再找比基準大的元素,找到后交換。重復以上步驟,直到兩者相遇。在這個時候,我們的相遇點的元素與基準值進行交換這樣我們的一趟快排就結束了

(覺得很空洞的可以看我之前的博客)

但是如果我們做選擇題的話還有簡單方法,我們就不用以上方法了,我之所以提一下以上方式只是為了讓大家回顧一下快排而已,接下來我將在題目的講解中教會大家這種方法


對于模擬題的最好解法就是畫圖:

<1>根據題目的要求我們選擇 30 作為基準 key,一般都是第一個位置的元素作為基準,然后我們依舊是采用雙指針,也就是 left 指向剩余元素的起始位置,right 指向剩余元素的末尾位置,如下圖所示:

<2>我們將基準元素單獨拉出來,留有一個空缺位置,像這樣:

這個時候準備工作已經做完了,可以開始操作了

<3>我們先從右邊開始找到比基準值還要小的元素

我們找到的元素是 10,就塞到那個空缺的位置中

<4>其次我們從左邊開始找比基準值大的元素

我們找到的是 40 也塞到空缺的位置中

重復以上操作

<5>當我們的雙指針重疊時,就將 30 塞回空缺位置中

這樣我們就完成了一趟快排,實在不知道為什么這樣做的老鐵先去看一下快排吧,我這里只教方法

這道題的正確答案:B

?也不知道,大家對上題了解了多少,這里再提供一道

對數字序列28 16 32 12 60 2 5 72進行升序的快速排序(以第一個關鍵碼為基準的方法)
一次劃分后的結果為()
A.2 5 12 16 28 60 32 72
B.2 16 5 12 28 60 32 72
C.2 16 12 5 28 60 32 72
D.5 16 2 12 28 32 60 72

我們這次干脆換一種方法吧 ~ 用我們快排的原始方法:

一開始與上面那題同理,找到基準,再固定雙指針

<1>右邊開始先找小于基準的元素,左邊再找大于基準的元素

我們找到的是 5 后,左邊在開始找

<2>數據都找到了便交換兩者的數據

<3>重復以上步驟

<4>當兩個指針相遇時,便讓當前數據與基準值 key 做交換

所以答案選擇:B

解析:

快速排序以基準值為中心,對元素進行劃分,這里?28 為基準值,則小于 28 的和大于 28 的進行交換,完成一次劃分

這樣我們的快排模擬的題型就告以段落吧,接下來我們來看看堆排序的題型

現有數字序列 5 11 7 2 3 17,目前要通過堆排序進行降序排序
那么由該序列建立的初始堆應為()
A.2 3 7 11 5 17
B.17 11 7 2 3 5
C.17 11 7 5 3 2
D.2 3 5 7 11 17

我們先來分析一下題目,對堆還不了解的去點上面的鏈接:

這里說進行降序排序,所以我們要建堆,每次把堆頂元素放在當前堆的最后一個位置

建堆要進行向下調整算法(從最后一個非葉子節點開始進行向下調整算法,直到根元素

我們這里就簡單的模擬一下吧:

堆簡單來說就是二叉樹的數組表現形式,這里我們通過堆模擬一下二叉樹

然后從我們的葉子節點開始,因為我們是建立小堆,那么最小的元素肯定是排在上面的

知道這個原理我們就來開始調整

因為 2 (左孩子)比 3(右孩子)小也比 11(雙親)小

所以我們就要調整 2 與 11 的位置(根據小堆原理,最小元素排在上面)

重復上面步驟開始建堆

最后我們建堆完成后便是這個樣子:

然后轉化為我們的數組,所以初始堆序列為: 2 3 7 11 5 17

因此答案:A

?所以像這種送分題務必拿下 ~

?畫圖題基本上已經講完了,我們來看一下概念題 ~

下列排序算法中,占用輔助空間最多的是()
A.歸并排序
B.快速排序
C.希爾排序
D.堆排序

答案:A

解析:

歸并排序空間復雜度:n

快排: logn

希爾、堆排: 1


下列關于排序方法和其平均時間復雜度,配對錯誤的是()
A.堆排序——O(nlog2 n)
B.直接插入排序——O(n^2)
C.選擇排序——O(n^2)
D.歸并排序——O(n^2)

答案:D

解析:

歸并排序是二分排序,其實際復雜度為 nlogn


下列排序方法中,每一趟排序結束時都至少能夠確定一個元素最終位置的方法是( )① 選擇排序② 歸并排序③ 快速排序④ 堆排序A.①④
B.①②④
C.①③④
D.①②③④

這種題就考的是對所有排序的模擬了,需要你了解所有排序的實現原理,屬于偏難的題目,小概率會出

答案:C

解析:

(1)選擇排序每次選一個最值,放在最終的位置

(2)快速排序每次基準值的位置也可以確定

(3)堆排序每次堆頂元素的位置也可以確定

所以這三種方法都可以每次至少確定一個元素的位置

(4)歸并排序每次都需要對 n 個元素重新確定位置,所以不能保證每次都能確定一個元素位置,有可能每次排序所有元素的位置都為發生變化


下列排序方法中,哪一種是不穩定的()
A.直接插入排序
B.歸并排序
C.選擇排序
D.冒泡排序

答案:C

解析:

(1)直接插入一般可以從前向后進行元素的插入,相同元素的相對位置可以不發生變化

(2)歸并也可以保證相對位置不變

(3)冒泡排序在元素相同的情況下也可以不進行交互,也可以保證穩定

(4)選擇排序的思想是每次選出最值,放在已排序序列的末尾,如果最值有多個,而選出的為最后一個最值,會導致相對位置發生變化


下列關于歸并排序的說法中正確的是()
A.歸并排序不需要輔助空間
B.歸并排序的時間復雜度是O(logn)
C.歸并排序是穩定排序
D.歸并排序的操作方式類似二叉樹的前序遍歷

答案:C

解析:

(1)歸并排序需要一個輔助空間暫時保存部分區間的排序元素

(2)歸并排序是一種二分排序算法,每次都需要給 n 個元素排序,排序的過程需要 logn,即樹的高度,所以時間復雜度為 nlogn

(3)歸并排序中,相同元素的相對位置不會發生變化,所以是穩定排序

?

本期就介紹到這里吧,排序的話應該考的不多,但是快排必考(經驗+直覺)

我們下期再見 ~

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/36114.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/36114.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/36114.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MyBatis源碼分析--一級緩存、二級緩存原理

前言&#xff1a; 有點項目經驗的朋友都知道緩存的重要性是不言而喻的&#xff0c;不僅僅我們在開發項目業務功能的時候使用了各種緩存&#xff0c;框架在設計的時候也有框架層面的緩存&#xff0c;尤其在查詢多的場景下&#xff0c;緩存可以大大的減少數據庫訪問&#xff0c;…

微前端框架是為了解決項目應用在大型項目中帶來的復雜性和維護難題而提出的技術方案。

微前端框架是為了解決單頁應用&#xff08;SPA&#xff09;在大型項目中帶來的復雜性和維護難題而提出的技術方案。Qiankun.js、MicroApp 和 Wujie 是三種流行的微前端框架。以下是對這三種框架的優缺點分析&#xff1a; Qiankun.js 優點 成熟度高&#xff1a;Qiankun.js 基…

【知識學習】闡述Unity3D中FogLOD的概念及使用方法示例

在Unity3D中&#xff0c;Fog&#xff08;霧效&#xff09;和LOD&#xff08;Level of Detail&#xff0c;細節層次&#xff09;是兩種用于提高場景視覺效果和性能的技術。 Fog&#xff08;霧效&#xff09; 霧效是一種視覺效果&#xff0c;用于模擬大氣中的霧或煙&#xff0c…

YOLOv8數據集標注

1 簡介 數據集是必不可少的部分&#xff0c;數據集的優劣直接影響訓練效果。一般來說&#xff0c;一個完整的數據集應該包括訓練集、測試集和驗證集。通常&#xff0c;數據集會被劃分為訓練集和測試集&#xff0c;比如將數據集的70%用作訓練集&#xff0c;30%用作測試集。在進行…

信號處理——時頻分析

經典傅里葉變換的限制&#xff1a; 1、只能反映信號的整體特性&#xff1b;&#xff08;完全是時域或頻域&#xff09; 2、要求信號滿足平穩條件&#xff1b; 3、必須獲得時域中的全部信息。 所以引入時頻分析&#xff0c;同時使用時間和頻率的聯合函數來表示信號。 1 時頻…

提高數據融合效率和數據成果質量工作流的可行性分析

第一章 引言 本文基于對框架數據、地名地址數據以及變更調查數據為主體數據源的分析&#xff0c;結合數據融合中分層數據處理原則和內容&#xff0c;從數據管理者、數據應用的角度提出數據質量的定位、需求定位&#xff0c;歸納數據融合過程中存在的困難&#xff0c;提出了數據…

嵌入式linux面試題大全及參考答案(3萬字長文)

目錄 解釋Linux內核的主要職責 什么是inode?它在文件系統中扮演什么角色? 常用的5個Linux文件權限標志 查看當前系統運行級別 查找包含特定字符串的文件 使用grep命令過濾特定模式的行 編寫腳本檢查指定目錄下文件大小并排序輸出 解釋變量、環境變量和位置參數在Shel…

前端npm打包自動壓縮

需要插件rollup-plugin-compression 在vite.config中使用 import compresssionBuild from rollup-plugin-compression import type { ICompressionOptions } from rollup-plugin-compression import dayjs from dayjs import packageInfo from ./package.json const option: I…

FANUC噴涂機器人P-350iA電機過熱維修解決方案

發那科噴涂機器人作為自動化噴涂生產線的重要組成部分&#xff0c;其性能穩定性和可靠性對于生產效率和產品質量具有重要影響。然而&#xff0c;在實際使用過程中&#xff0c;FANUC噴涂機器人P-350iA電機過熱故障問題往往成為影響其正常運行的主要因素之一。 FANUC機器人M-100…

產品經理進階:供應鏈管理制度

目錄 一、 目的 二、范圍 三、意義 五、周期 一、 目的 根據公司戰略規劃和經營目標,建立和完善生產計劃、物料控制體系、庫存 管理體系。通過匹配需求和產能,確保在滿足市場需求的同時降低整體庫存 水平,提高存貨周轉率,以達成公司的成本管理目標。 二、范圍 涉及供應…

vue2的雙向綁定

vue是一個mvvm框架&#xff0c;即數據雙向綁定&#xff0c;即當數據發生變化的時候&#xff0c;視圖也就發生變化&#xff0c;當視圖發生變化的時候&#xff0c;數據也會跟著同步變化。 Vue.js 2 中的雙向綁定是通過 v-model 指令實現的。v-model 指令可以在表單輸入元素上創建…

一款開源免費的現代化風格的Avalonia控件庫

前言 Citrus.Avalonia是一款開源&#xff08;MIT License&#xff09;、免費的現代化風格的Avalonia控件庫。 Avalonia介紹 Avalonia是一個強大的框架&#xff0c;使開發人員能夠使用.NET創建跨平臺應用程序。它使用自己的渲染引擎繪制UI控件&#xff0c;確保在Windows、mac…

推薦系統數據集——Amazon-Book

在推薦系統中&#xff0c;像Amazon-Book這樣的數據集通常包含用戶和物品的交互信息。為了訓練模型&#xff0c;這些數據需要轉換成適合模型輸入的格式。在這種情況下&#xff0c;item_list和user_list需要轉換成train.txt文件&#xff0c;通常包含用戶ID和物品ID的交互記錄。 …

你的生日是星期幾?HTML+JavaScript幫你列出來

0 源起 上周末&#xff0c;大寶發現今年自己的生日不是周末&#xff0c;這樣就不好約同學和好友一起開生日Party了&#xff0c;很是郁悶。一直嘀咕自己哪年的生日才是周末。 于是我用JavaScript寫了一個小程序來幫她測算了未來100年中每年的生日分別是星期幾。 1 設計交互界面…

torch創建2d卷積層報錯

import torch import torch.nn as nn print(nn.Conv2d(3, 16, 3, padding1)) 編譯器:pycharm2023.03.05 python&#xff1a;3.11 運行上述代碼 頁面報錯&#xff1a;OSError: [WinError 126] 找不到指定的模塊。 Error loading "D:\apploadpath\pythonPath\Lib\site-…

logback自定義規則脫敏

自定義規則conversionRule public class LogabckMessageConverter extends MessageConverter {Overridepublic String convert(ILoggingEvent event) {String msg event.getMessage();if ("INFO".equals(event.getLevel().toString())) {msg .....脫敏實現}return …

搭建大型分布式服務(四十一)SpringBoot 整合多個kafka數據源-支持億級消息生產者

系列文章目錄 文章目錄 系列文章目錄前言一、本文要點二、開發環境三、原項目四、修改項目五、測試一下五、小結 前言 本插件穩定運行上百個kafka項目&#xff0c;每天處理上億級的數據的精簡小插件&#xff0c;快速上手。 <dependency><groupId>io.github.vipjo…

【ARM】MCU和SOC的區別

【更多軟件使用問題請點擊億道電子官方網站】 1、 文檔目標 了解SOC芯片和MCU芯片的區別 2、 問題場景 用于了解SOC芯片和MCU芯片的區別&#xff0c;內部結構上的區別。 3、軟硬件環境 1&#xff09;、軟件版本&#xff1a;無 2&#xff09;、電腦環境&#xff1a;無 3&am…

【小學期】安裝Navicat,可視化操作數據庫

什么是Navicat&#xff0c;如何安裝&#xff1f;如何操作&#xff1f; 1. 什么是Navicat&#xff1f; Navicat 是一款功能強大的數據庫管理工具&#xff0c;支持多種數據庫系統&#xff0c;包括 MySQL、PostgreSQL、SQLite、Oracle、MariaDB 和 SQL Server 等。Navicat 提供了…

Java——枚舉

1. 概念 枚舉是在JDK1.5之后引入的&#xff0c;主要用途是&#xff1a;將一組常量組織起來&#xff0c;在這之前表示一組常量通常使用定義常量的方式&#xff1a; public static final int RED 1; public static final int GREEN 2; public static final int BLACK 3;但是…