408第一季 - 數據結構 - 排序

排序的概念

外部排序很難,后面都是內部排序?

插入排序

直接插入排序

理解

這個排序第一輪是從第二個元素開始的

然后是從后往前一個一個比的

然后我們看i=5的情況,會出現比較次數和移動次數的概念,這里97動了

然后i=8時,49最好放在相同的后面,這樣就可以穩定

這個算法會有n-1趟

然后第n趟會有n+1個有序,比如第二趟i=3時會有3個元素有序

這是最壞情況,可以看見第一趟移動和比較都是1次,第二趟2次,第三趟3次

也就是這么多次移動和比較

折半插入排序

理解

前面不是已經是有序的嗎,所以用折半多爽啊

直接是從后往前比,而折半是折半查找比,這里查找順序是65,49,38

題目

d

希爾排序

理解

下面增量d=5

然后每組之間排序?也可以直接豎著寫,這樣更快

然后是增量為3

然后豎著寫,這樣更快,結果:

那增量怎么取?

沒錯,最后一個是增量是d=1就行

這就是傳說中的

?鏈表不太行啊

題目

1

2

我們先看d=3行不行

一會升序一會降序,所以不是3

然后看d=5可以發現每一組都是有序的,而且必須每一組都是有序的,所以一定要豎著寫下來

然后根據第一趟看第二趟的就行了

d

交換排序

冒泡排序

理解

怎么去做呢,看好了

49 和 27 比,小的在上,大的在下,很好,過

27 和 13 比,小的在上,大的在下,很好,過

13 和 76 比,小的在下,大的在上,不好,交換!

。。。就這樣一直比下去就行,就是1輪

第一輪比較了n-1次,并且13已經確定好了

第二輪比較了n-2次,并且27已經確定好了

。。。

然后會有這個規律

然后注意

最好情況就比較了1次

快速排序

理解

這是規矩

快排的目的是小的放左邊,大的放右邊

這里6作為樞軸(pivot),從7往左比較

然后比較一下7,沒問題,是大于6的,太好了,很舒服,不錯,繼續保持,加油

然后比較一下4,wait,wait,wait,what the HELLLLL!WAAZZZAAAA!是小于6的

然后會發生很多事情

4先到樞軸上去,6往后找比它大的,找到了9

然后把9放到4那里,9的地方就存儲6

然后神奇的事情發生了,6變成了我們想要的樣子,左邊小于6,右邊大于6,6這個位置已經確定了

然后就是算法大師最喜歡的分治法

左右兩邊都處理是第二趟,左右兩邊都進行快排

先看左邊

,這里4是樞軸,然后從5開始往右

5沒事

1有事,小于4,先把1到樞軸,然后樞軸的指針往后移動開始找比它大的數,最后發現與右指針相遇,于是只能把4放到那里

再看右邊

這里8是樞軸,然后從7開始往右

7有事,小于8,先把7到樞軸,然后樞軸的指針往后移動開始找比它大的數,發現個9,9到7那里,8插入到里面來

然后不用第三趟了,因為左右兩邊就1個元素

然后每次會有logn趟,每趟是n

所以時間復雜度Onlogn

最差情況下是有序的情況,時間復雜度達到On^2

比如這里,1要找比它小的,找了n-1次,沒找到,向右的指針會到1這里,1確定了,然后樞軸指針往后移動變成2,再來一次,找了n-2次,就這樣,當然別固化死了,這里樞軸不一定要是第一個,也可以是中間的4,但說到底只有一個樞軸。

鏈表還是不行

做題

1

d 不解釋?

2

?

?這里是樞軸產生的三種情況,可以注意到d選項,

12如果是第一趟的樞軸,那應該左右兩邊都有才對,然而并不是左右,這里只有一個32

?

?然后我們看看A選項

這里我們那72當第一趟,那28作為下一趟就合理了

3

這里,最少最少得有2個樞軸,而C選項只有1個9

B選項是9和2是樞軸

c

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

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

相關文章

高效賬號信息管理工具,可安全隨機生成密碼

軟件介紹 今天給大家推薦一款安全可靠的密碼管理工具,幫助用戶輕松管理各類賬號密碼。 安全便捷的密碼解決方案 這是一款采用先進加密技術開發的密碼管理器,不僅可以生成高強度隨機密碼,還提供安全的賬號密碼備份存儲功能。 基礎安全設置 …

如何在markdown文件中(博客)添加emoji表情,讓你的博客看起來更加優雅

在Markdown中使用Emoji的完整指南 按分類快速參考的完整Emoji列表一、狀態指示類:bulb:二、提示信息類:bulb:三、內容類型類:bulb:四、操作指令類:bulb:五、進度狀態類:bulb:六、技術相關類:bulb:七、人員角色類:bulb:八、版本控制類:bulb: 你學會了嗎 按分類快速參考的完整Emo…

MAZANOKE:一款隱私優先的瀏覽器圖像優化工具及Docker部署指南

在日常工作中,大家是否經常遇到這樣的需求:需要壓縮圖片體積、調整圖片尺寸或轉換圖片格式,但又受限于數據安全要求無法將圖片上傳至公網?在我們之前開發的工單配置系統中,這類需求尤為常見。最近在GitHub上發現了一款…

【Vue PDF】Vue PDF 組件初始不加載 pdfUrl 問題分析與修復

Vue PDF 組件初始不加載 pdfUrl 問題分析與修復 問題現象 在開發 PDF 預覽組件時,遇到這樣一個問題: 初始狀態下,PDF 組件不會請求 pdfUrl(即不會加載 PDF 文件)。只有點擊"全屏"按鈕后,才會請…

《注解的江湖:一場元數據的“宮斗劇”》

一、你真的懂注解嗎 你是否使用過Autowired卻不知道是如何生效的? 這幾個注解你一定很熟悉: OverrideDeprecatedTransactional 那么你有進一步思考過怎么生效的嗎?注解到底是什么?注解,到底是信息?還是指…

智能土木通 - 土木工程專業知識問答系統02-RAG檢索模塊搭建

一、項目目錄 civil_qa_system/ ├── docs/ # 項目文檔 ├── config/ # 配置文件 ├── core/ # 核心功能代碼 ├── knowledge_base/ # 知識庫相關 ├── web/ # Web應用部分 ├…

進程和線程區別、管道和套接字、共享變量、TCP三次握手,是否可以少一次握手、子進程和主進程區別和API——Nodejs

首先講了進程和線程區別 然后講解 管道和套接字,它是進程間通信的方式 接著講解共享變量 ,它是線程間通信 最后講解TCP三次握手,因為套接字使用了TCP協議 一、線程和進程的區別 線程(Thread)和進程(Pr…

docker(學習筆記第一課) 使用nginx +https + wordpress

文章目錄 docker(學習筆記第一課) 使用nginx https wordpress學習內容:1. 整體架構1.1 在aws ec2的整體架構1.2 不懂都可以問AI 2. 構建詳細2.1 構建ec22.2 安裝docker2.3 創建一個docker的內部network2.4 創建wordpress使用的mysql數據庫2.5 創建兩個wordpress的d…

Leetcode 刷題記錄 15 —— 二分查找

本系列為筆者的 Leetcode 刷題記錄,順序為 Hot 100 題官方順序,根據標簽命名,記錄筆者總結的做題思路,附部分代碼解釋和疑問解答,01~07為C語言,08及以后為Java語言。 01 搜索插入位置 class Solution {pub…

C++核心編程(動態類型轉換,STL,Lanmda)

一. 類型轉換 二. STL 1. 容器 1.1 Vector(常用) 1.1.1 概述 特性: 動態數組: 想象成一個會自動變長變短的數組。起始在內存中是連續存儲的。 隨機訪問: 通過[]運算符或at()方法,可以瞬間(…

【圖像處理入門】8. 數學基礎與優化:線性代數、概率與算法調優實戰

摘要 圖像處理的核心離不開數學工具的支撐。本文將深入解析線性代數、概率論在圖像領域的應用,包括矩陣變換與圖像幾何操作的關系、噪聲模型的數學描述,以及遺傳算法、粒子群優化等智能算法在參數調優中的實踐。通過理論結合代碼案例,幫助讀者掌握從數學原理到工程優化的完…

操作系統八股文

一.進程和線程的區別 1.本質區別和所屬關系是什么? 進程是資源調度以及分配的基本單位。 線程是CPU調度的基本單位。 一個線程屬于一個進程,一個進程可以擁有多個線程。 2.地址空間和內存 進程擁有獨立的虛擬地址空間。 線程沒有獨立的地址空間&#xf…

【uniapp】小程序中input輸入框的placeholder-class不生效

解決方法 1.去掉scoped <style></style> 2.額外寫一組style </style lang"scss" scoped> </style> <style> ::v-deep .textarea-placeholder { font-size: 24rpx; font-weight: 400; …

大模型訓練與推理顯卡全指南:從硬件選型到性能優化

在人工智能技術飛速發展的今天&#xff0c;大型語言模型(LLM)已成為推動行業進步的核心動力。然而&#xff0c;訓練和部署這些“數字巨人”需要強大的計算基礎設施作為支撐&#xff0c;其中GPU的選擇直接決定了模型開發的效率與成本。本文將全面剖析當前主流GPU型號在大模型訓練…

Linux Docker的環境配置與簡單使用

參考資料 Windows Docker Desktop設置中文【Docker 】Docker Desktop for Windows&#xff08;WSL 2&#xff09;安裝WSL 2 上的 Docker 遠程容器入門 目錄 一. 環境配置1.1 安裝WSL1.2 安裝配置 Docker Desktop1.3 VS Code 插件安裝1.4 下載項目&#xff0c;配置Dockerfile 二…

函數指針與指針函數:本質區別與高級應用

目錄 一、概念本質解析 1. 函數指針&#xff08;Function Pointer&#xff09; 2. 指針函數&#xff08;Pointer Function&#xff09; 二、函數指針深度剖析 1. 基礎用法示例 2. 高級應用&#xff1a;回調函數 3. 函數指針數組 三、指針函數深入探討 1. 基礎實現模式 …

【python】基于pycharm的海康相機SDK二次開發

海康威視二次開發相機管理 這段代碼基于python開發的&#xff0c;用了opencv的一些庫函數。實現了一個完整的海康機器人相機管理工具&#xff0c;支持多相機連接、參數配置、圖像采集和實時顯示功能。目前USB相機測試無誤&#xff0c;除了丟一些包。 1. 主要類結構 HKCameraM…

HTTP 協議各個主要版本的功能特點、核心原理、使用場景總結

我們來系統總結一下 HTTP 協議各個主要版本的功能特點、核心原理&#xff08;用圖示輔助說明&#xff09;以及典型使用場景。 核心演進目標&#xff1a; 提升性能、安全性、效率和靈活性。 1. HTTP/0.9 (1991) - 遠古雛形 功能特點: 極其簡單&#xff1a; 只支持 GET 方法。無…

Linux編程:3、進程通信-信號

一、進程通信概述 &#xff08;一&#xff09;進程通信的目的 在企業開發中&#xff0c;一個項目常常需要多個進程共同協作&#xff0c;而這些進程之間需要進行通信&#xff08;交換信息&#xff09;以便協作。本章內容主要圍繞信號講解&#xff0c;其它進程通信的常用方式請…

深度解析Vue.js組件開發與實戰案例

一、Vue.js組件化思想 Vue.js的核心思想之一就是組件化開發。組件系統是Vue的一個重要概念,它允許我們使用小型、獨立和通常可復用的組件構建大型應用。在Vue中,組件本質上是一個擁有預定義選項的Vue實例。 1.1 為什么需要組件化 代碼復用:避免重復造輪子,提高開發效率可…