《大话数据结构》参考
參考:數據結構與算法系列?https://mp.csdn.net/postlist/list/all?undefined=all&cate=8660447
【筆記】《大話數據結構》https://blog.csdn.net/jianbinzheng/article/details/79858736
寫在前面
第1章 數據結構緒論
第2章 算法
第3章 線性表
第4章 棧與隊列
第5章 串
第6章 樹
第7章 圖
第8章 查找
第9章 排序
寫在前面
快速的過了一遍,對于初學者來說講的很細,很有助于理解;對于有一定基礎的人可能會覺得敘述太墨跡。。。
第1章 數據結構緒論
程序設計=數據結構+算法
數據:是描述客觀事物的符號,是計算機中可以操作的對象,是能被計算機識別,并輸入給計算機處理的符號集合。
數據元素:是組成數據的、有一定意義的基本單元,在計算機中通常作為整體處理,也稱為記錄
數據項:一個數據元素可以由若干個數據項組成,是數據不可分割的最小單位
數據對象:是性質相同(同數量類型的數據項)的數據元素的集合,是數據的子集
數據結構:是相互之間存在一種或多種特定關系的數據元素的集合
邏輯結構:是指數據對象中數據元素之間的相互關系。集合結構、線性結構、樹形結構、圖形結構
物理結構:是指數據的邏輯結構在計算機中的存儲形式。順序存儲結構、鏈式存儲結構
數據類型:是指一組性質相同的值的集合及定義再此集合上的一些操作的總稱
抽象數據類型(Abstract Data Type, ADT):是指一個數學模型及定義在該模型上的一組操作
第2章 算法
算法是解決特定問題求解步驟的描述,在計算機中表現為指令的有限序列,并且每條指令表示一個或多個操作
算法的特性:輸入輸出(輸入>=0個,輸出>=1個);有窮性;確定性;可行性
算法的設計要求:正確性、可讀性、健壯性
算法的效率度量:事后統計、事前估算
算法的時間復雜度定義:進行算法分析時,語句總的執行次數T(n)是關于問題規模n的函數,進而分析T(n)隨n的變化情況并確定T(n)的數量級,算法的時間復雜度,也就是算法的時間量度,計作T(n)=O(f(n))T(n)=O(f(n))。它表示隨問題規模n的增大,算法執行時間的增長率和f(n)的增長率相同,稱作算法的漸進時間復雜度,簡稱為時間復雜度。其中f(n)是問題規模n的某個函數。
推導大O階的方法:用1替換加法;只保留最高階項;最高階項系數為1
O(1)<O(logn)<O(n)<O(nlogn)<O(n2)<O(n3)<O(2n)<O(n!)<O(nn)O(1)<O(log?n)<O(n)<O(nlog?n)<O(n2)<O(n3)<O(2n)<O(n!)<O(nn)
第3章 線性表
線性表(List):零個或多個數據元素的有限序列(順序)
線性表的抽象數據類型Operation:InitList/ListEmpty/ClearList/GetElem/LocateElem/ListInsert/ListDelete/ListLength
線性表的順序存儲結構:指的是用一段地址連續的存儲單元以此存儲線性表的數據元素——一維數組;插入刪除為O(n),查詢為O(1)
線性表的鏈式存儲結構:數據域、指針域、結點、頭指針、后繼指針地址;
每個結點只包含一個指針域的叫做單鏈表;插入刪除為O(1),查詢為O(n)
靜態鏈表:用數組描述的鏈表。每個元素存儲數據和指向下一個位置的索引
循環鏈表:頭尾相接的單鏈表稱為單循環鏈表,建成循環鏈表(circular linked list)
雙向鏈表:每個結點分別指向前驅和后繼的鏈表——空間換時間
第4章 棧與隊列
棧(stack)是限定僅在表尾進行插入和刪除操作的線性表;棧頂(top)、棧底(bottom)、后進先出(Last In First Out, LIFO);入棧、出棧
棧的抽象數據類型Operation:InitStack/DestroyStack/ClearStack/StackEmpty/GetTop/Push/Pop/StackLength
棧的順序存儲結構——順序棧
兩棧空間共享,top1+1=top2則棧滿,用于同類型、空間需求相反的關系
棧的鏈式存儲結構——鏈棧,單鏈表的頭結點作為棧頂
棧的應用——遞歸:斐波那契數列
棧的應用——四則運算表達式:1)中綴表達式轉后綴表達式;2)后綴表達式(逆波蘭,RPN)運算求結果;
9+(3?1)×3+10÷29+(3?1)×3+10÷2
9?3?1???3?×+?10?2÷+9?3?1???3?×+?10?2÷+
隊列(queue)是只允許在一端進行插入操作,在另一端進行刪除操作的線性表;先進先出(FIrst In First Out, FIFO)
隊列的抽象數據類型
Operation:InitQueue/DestroyQueue/ClearQueue/QueueEmpty/GetHead/EnQueue/DeQueue/QueueLength
循環隊列,頭尾相接的順序存儲結構,解決存儲空間問題,front表示隊頭、rear表示隊尾;
QueueLen=(rear?front+QueueSize)%QueueSizeQueueLen=(rear?front+QueueSize)%QueueSize
隊列的鏈式存儲結構——鏈隊列
第5章 串
串(string)是由零個或多個字符組成的有限序列,又名字符串
串的抽象數據類型Operation:StrAssign/StrCopy/ClearString/StringEmpty/StrLength/StrCompare/Concat/SubString/Index/Replace/StrInsert/StrDelete
串的順序存儲結構、鏈式存儲結構(每個結點多個字符)
串的模式匹配算法——子串的定位操作。1)樸素方法,每次推進一格;2)KMP模式匹配,跳過子串中前幾個與第一個字符不一致的;3)KMP模式匹配改進,再跳過子串本身與第一個字符串一致的
第6章 樹
樹(Tree)是n(n≥0)個結點的有限集。n=0時稱為空樹。在任意一棵非空樹種:(1)有且僅有一個特定的稱為根(Root)的結點;(2)當n>1時,其余結點可分為m(M>0)個互不相交的有限集T1,T2,...,TmT1,T2,...,Tm,中每一個集合本身又是一棵樹,并且稱為根的子樹(SubTree)
度:結點擁有的子樹數稱為結點的度(Degree)。度為0的結點稱為葉結點(Leaf)或終端結點;度不為0的結點稱為非終端結點或分支結點。除根結點之外,分支結點也成為內部結點。樹的度是樹內各結點的度的最大值。
結點的子樹的根稱為該結點的孩子(Child),相應地,該結點稱為孩子的雙親(Parent)
同一個雙親的孩子之間互稱兄弟(Sibling),結點的祖先是從根到該結點所經分支上的所有結點。
以某結點為根的子樹中的任一結點都稱為該結點的子孫
結點的層次(Level)從根開始定義起,根為第一層,根的孩子為第二層。
雙親再同一層的結點互為堂兄弟
樹中結點的最大層次稱為樹的深度(Depth)或高度
森林(Forest)是m(m≥0)棵互不相交的樹的集合
樹的抽象數據類型Operation:InitTree/DestroyTree/CreateTree/ClearTree/TreeEmpty/TreeDepth/Root/Value/Assign/Parent/LeftChild/RightSibling/InsertChild/DeleteChild
樹的存儲結構:雙親表示法、孩子表示法、孩子兄弟表示法
二叉樹(Binary Tree)是n(n≥0)個結點的有限集合,該集合或者為空集(稱為空二叉樹),或者由一個根結點和兩棵互不相交的、分別稱為根結點的左子樹和右子樹的二叉樹組成
二叉樹的五個基本結構
斜樹,所有結點都只有左子樹或都只有右子樹的二叉樹
滿二叉樹,二叉樹所有結點都存在左子樹和右子樹,所有葉子結點都在同一層,稱為滿二叉樹
完全二叉樹,對一棵具有n個結點的二叉樹按層序編號,如果編號為i(1≤i≤n)的結點與同樣深度的滿二叉樹中編號為i的結點再二叉樹中位置完全相同,則這棵二叉樹稱為完全二叉樹
二叉樹性質1:在二叉樹的第i層上至多有2i?12i?1個結點(i≥1)
二叉樹性質2:深度為k的二叉樹至多有2k?12k?1個結點(k≥1)
二叉樹性質3:對任何一棵二叉樹T,如果其終端結點數為n0n0,度為2的結點數為n2n2,則n0=n2+1n0=n2+1
二叉樹性質4:具有n個結點的完全二叉樹的深度為?log2n?+1?log2?n?+1
二叉樹性質5:如果一棵有n個結點的完全二叉樹的結點按層序編號,對任一結點i有:
1)i=1,根結點;i>1,雙親結點為?i2??i2?
2)若2i>n2i>n,則i無左孩子;否則左孩子為2i2i
3)若2i+1>n2i+1>n,則i無右孩子;否則右孩子為2i+12i+1
二叉樹的順序存儲結構,一般用于完全二叉樹
二叉樹的遍歷(traversing binary tree)是指從根結點出發,按照某種次序依次訪問二叉樹中所有結點,使得每個結點被訪問一次或僅被訪問一次
前序遍歷:中左右;中序遍歷:左中右;后序遍歷:左右中;層序遍歷:按層從左至右;
已知前序遍歷和后序遍歷,是不能確定一顆二叉樹的
按某種遍歷順序,指向前驅或后繼的指針稱為線索,加上線索的二叉樹鏈表稱為線索鏈表,相應的二叉樹稱為線索二叉樹;把二叉樹已某種次序變為線索二叉樹的過程稱為線索化
線索二叉樹等于把二叉樹變為一個雙向鏈表,如中序遍歷
樹轉二叉樹:加線、去線、層次調整
森林轉二叉樹:每棵樹轉二叉樹、分別作為前一個的根結點的右子樹
從樹中一個結點到另一個結點之間的分支構成兩個結點之間的路徑,路徑上的分支數目稱做路徑長度。樹的路徑長度就是從樹根到每一結點的路徑長度之和。
帶權路徑長度WPL最小的二叉樹稱做哈夫曼樹
按照頻率從小到大排序,兩兩合并組成二叉樹新結點,最后合并為哈夫曼樹。左分支為0,右分支為1,對應編碼為哈夫曼編碼
第7章 圖
圖(Graph)是由頂點的有窮非空集合和頂點之間的集合組成,通常表示為:G(V,E),其中,G表示一個圖,V是頂點集合,E是邊的集合
無向邊:頂點之間的邊沒有方向,用()表示,組成無向圖
有向邊:頂點之間有方向,也稱弧,用<>表示,組成有向圖
無向完全圖,無向圖中任意兩點都存在邊。共n×(n?1)2n×(n?1)2條邊
有向完全圖,任意兩個頂點間存在互為相反的兩條弧
有很少條邊的稱為稀疏圖,反之稱為稠密圖
帶權的圖稱為網
子圖
同一條邊的兩個點互為鄰接點;邊依附/關聯于這兩個點;度是頂點關聯的邊的數目;入度是有向圖中指向該點的邊的數目;出度是發射出的數目;
路徑是點到點之間的頂點序列;路徑的長度是路徑上邊/弧的數目;第一個點點和最后一個頂點相同的路徑稱為回路/環;頂點不重復的路徑稱為簡單路徑;只在首尾點不重復的回路稱為簡單回路/簡單環;
無向圖中,存在點到點之間的路徑則稱為兩點連通,圖中任意兩點連通的稱為連通圖;最大連通子圖稱為連通分量;有向圖中稱為強連通圖、強連通分量
無向圖中連通且有n個頂點n-1條邊叫生成樹,有向圖中一個頂點入度為0其余頂點入度為1的叫有向樹,一個有向圖由若干棵有向樹構成生成森林
圖的抽象數據類型Operation:CreateGraph/DestroyGraph/LocateVex/GetVex/PutVex/FirstAdjVex/NextAdjVex/InsertVex/DeleteVex/InsertArc/DeleteArc/DFSTraverse/HFSTraverse
圖的存儲結構
1)鄰接矩陣:點數組+二維矩陣
2)鄰接表:數組+鏈表
3)十字鏈表:有向圖nice
4)鄰接多重表:
5)邊集數組
圖的遍歷:從圖中某一頂點出發遍歷圖中其余頂點,且使每一個頂點僅被訪問一次
深度優先遍歷,DFS;適合找到精確目標;
廣度優先遍歷,BFS;適合找到相對優解;
最小生成樹:把構造聯通網的最小代價生成樹稱為最小生成樹
Prim算法:假設N=(P,{E})N=(P,{E})是連通網,TE是N上最小生成樹中邊的集合。算法從U={u0}?(u0∈V),TE={}U={u0}?(u0∈V),TE={}開始,重復執行:在所有u∈U,v∈V?Uu∈U,v∈V?U的邊(u,v)∈E(u,v)∈E中找一條代價最小的邊(u0,v0)(u0,v0)并入集合TE,同時v0v0并入U,直至U=VU=V為止。此時TE中必有n-1條邊,則T=(V,TE)T=(V,TE)為N的最小生成樹;O(n2)O(n2)
Kruskal算法:假設N=(V,{E})N=(V,{E})是連通網,則令最小生成樹的初始狀態為只有n個頂點的無邊的非連通圖T={V,{}}T={V,{}},圖中每個頂點自成一個連通分量。在E中選擇代價最小的邊,若該邊依附的頂點落在T中不同的連通分量上,則將此邊加入到T中,否則舍去此邊而選擇下一條代價最小的邊。直至T中所有頂點都在同一連通分量上為止;O(eloge)O(elog?e)
克魯斯卡爾算法適合邊少的稀疏圖;普里姆算法適合稠密圖
最短路徑:兩頂點之間經過的邊上權值之和最少的路徑,并且我們稱路徑上的第一個頂點是源點,最后一個頂點時終點
Dijkstra算法:求解點到點的最短距離。用數組D表示距離和數組P表示前驅,通過迭代更新點到起點的最短距離實現。復雜度O(n2)O(n2)
Floyd算法:求解所有的任意兩點間的最短距離,用三層循環迭代更新點和點之間的最短距離。復雜度O(n3)O(n3)
在一個表示工程的有向圖中,用頂點表示活動,用弧表示活動之間的有限關系,這樣的有向圖為頂點表示活動的網,稱為AOV網(Activity On Vertex Network)。網中點序列,從頂點V1到頂點V2有路徑,則V1必在V2前面,這樣的頂點序列稱為一個拓撲序列
拓撲排序,就是對一個有向圖構造拓撲序列的過程,可能的結果包括頂點全部輸出——不存在環的AOV網;頂點未全部輸出,存在環,非AOV網。方法:從入度為0的頂點開始輸出,并刪除此點和相關弧,直至不存在入度為0的點為止。
帶權的有向圖中,用頂點表示事件,用有向邊表示活動,用邊上的權值表示活動的持續時間,這種有向圖的邊表示活動的網,稱為AOE網(Activity On Edge Network)
路徑上各個活動所持續的時間之和稱為路徑長度,從源點到匯點具有最大長度的路徑叫關鍵路徑,關鍵路徑上的活動叫關鍵活動。縮短整個工序工期必須從從縮短關鍵路徑入手
第8章 查找
查找(Searching)就是根據給定的某個值,在查找表中確定一個起關鍵字等于給定值的數據元素(或記錄)
查找表(Searching Table)是由同一類型的數據元素(或記錄)構成的集合
關鍵字(Key)是數據元素中某個數據項的值,也稱鍵值;若關鍵詞可以唯一標識一個記錄稱為主關鍵字,識別多個的稱為次關鍵字
靜態查找表(Static Search Table)只作查找操作的查找表
動態查找表(Dynamic Search Table)在查找過程中同時插入查找表中不存在的數據元素,或者從查找表中刪除已經存在的某個數據元素
順序查找(Sequential Search)又叫線性查找,即逐個的查找,時間復雜度最好/最差/平均:O(1)/O(n)/O(n)O(1)/O(n)/O(n)
有序表——折半查找(Binary Search),又稱二分查找:每次中中點分割縮小范圍;時間復雜度O(logn)O(log?n)
有序表——插值查找(Interpolation Search),根據插值公式確定分割點,插值公式key?a[low]a[high]?a[low]key?a[low]a[high]?a[low];時間復雜度O(logn)O(log?n);適合表教長且關鍵字分布均勻
有序表——斐波那契查找(Fibonacci Search),根據斐波那契數列確定分割點;時間復雜度O(logn)O(log?n)
索引:就是把一個關鍵字與它對應的記錄相關聯的過程,索引由若干索引項組成,索引項應包含關鍵字和其對應的記錄在存儲器中的位置
線性索引就是將索引項集合組織為線性結構,也稱為索引表
稠密索引:指在線性索引中,將數據集中的每個記錄對應一個索引項;數據可能無序,索引項有序
分塊索引:對分塊有序的數據集,每塊對應一個索引項;其中塊內無序、塊間有序;索引項包括最大關鍵碼、塊內記錄個數、塊首指針
倒排索引:索引項包括次關鍵碼、記錄號表;記錄號表存儲具有相同次關鍵字的所有記錄的記錄號(可以指向記錄的指針或者是該記錄的主關鍵字)
二叉排序樹(Binary Sort Tree),又稱二叉查找樹,具有性質:左子樹為空或所有結點的值小于根結點;右子樹為空或所有結點的值大于根結點;其左右子樹也是二叉排序樹
中序遍歷二叉排序樹即為有序序列
二叉排序樹若為平衡,則查找效率同折半;若嚴重入斜樹,則同順序查找
平衡二叉樹(Self-Balancing Binary Search Tree),是一種二叉排序樹,其中每一個結點的左子樹和右子樹高度差最多為1,也稱AVL樹
左子樹的深度減去右子樹的深度稱為平衡因子BF(Balance Factor)
距離插入點最近的,且平衡因子的絕對值大于1的結點為根的子樹,稱為最小不平衡子樹;插入新值后需要調整樹的平衡性
多路查找樹(multi-way search tree)其每個結點的孩子樹可以多于兩個,且每個結點可以存儲多個元素
2-3樹:每個結點由兩個(2結點)或三個(3結點)孩子,2結點有一個元素,3結點有兩個元素;且所有葉子結點在同一層上
2-3-4樹:相比2-3樹,包括了4結點——三個元素四個孩子
B樹(B-tree)是一種平衡的多路查找樹,2-3樹和2-3-4樹是B樹的特例,結點最大的孩子數目是B樹的階(order)
B樹的應用:處理的數據量很大,無法一次性裝入內存,使B樹的階數與硬盤存儲的頁面大小相匹配;則可以根結點存于內存,查找時只需讀取兩次硬盤即可;B樹的數據結構就是為內外存數據交互準備的
B+樹,解決B樹遍歷的時候也面來回跳轉的問題,適合范圍查找;在葉結點上保存父節點的值(葉子結點包含全部信息);葉子結點指向下一個葉子結點
散列技術是在記錄的存儲位置和它的關鍵字之間建立一個確定的對應關系f,使得每個關鍵字key對應一個存儲位置f(key);f稱為散列函數,又稱哈希(Hash)函數;采用散列技術,將記錄存儲在一塊連續的存儲空間中,這塊連續存儲空間稱為散列表或哈希表(Hash Table)
散列技術是一種存儲方法,也是一種查找方法,記錄之間不存在邏輯關系,適合于查找與給定值相等的記錄;不適合一個關鍵字對應多個記錄的查找、不適合范圍查找
若兩個關鍵字key1≠key2,f(key1)=f(key2)key1≠key2,f(key1)=f(key2),這種現場稱為沖突(collision)把key1和key2稱為散列函數的同義詞
散列函數構造——直接定址法,適合查找表較小的且連續的情況,取關鍵字的線性函數值做散列地址,如
f(key)=a×key+bf(key)=a×key+b
散列函數構造——數字分析法,適合處理關鍵字位數較大且若干位分布均勻的情況,抽取關鍵字的一部分作為散列存儲位置
散列函數構造——平方取中法,適合于不知道關鍵字分布且位數不大的情況,關鍵字取平方在截取部分,如1234,平方1522756,取中227
散列函數構造——折疊法,適合不知道關鍵字分布且位數較大的情況,折疊求和,如9876543210分為四組求和987+654+321+0=1962
散列函數構造——除余留數法,最常用,p常取不大于m的最大質數
f(key)=key?mod?p?(p≤m)f(key)=key?mod?p?(p≤m)
散列函數構造——隨機數法,適合關鍵字長度不等
散列沖突處理——開放定址法,沖突時,尋找下一個空的散列地址,也稱線性探測法。容易造成堆積現象(非同義詞爭奪一個地址),可采用二次探測法;或采用隨機探測法
fi(key)=(f(key)+di)?mod?m?(di=1,2,3,...,m?1)fi(key)=(f(key)+di)?mod?m?(di=1,2,3,...,m?1)
fi(key)=(f(key)+di)?mod?m?(di=12,?12,22,?22,...,q2,?q2,q≤m/2)fi(key)=(f(key)+di)?mod?m?(di=12,?12,22,?22,...,q2,?q2,q≤m/2)
fi(key)=(f(key)+di)?mod?m?(di為隨機數列)fi(key)=(f(key)+di)?mod?m?(di為隨機數列)
散列沖突處理——再散列函數法,通過多個散列函數進行,一個沖突換一個
散列沖突處理——鏈地址法,沖突位置用鏈表接續
散列沖突處理——公共溢出區法,為沖突關鍵字簡歷一個公共的溢出區來存放,適合沖突數據少的情況
如果沒有沖突,散列的查找時間為O(1)
第9章 排序
假設含有n個記錄的序列為{r1,r2,...,rn}{r1,r2,...,rn},其相應的關鍵字分別為{k1,k2,...,kn}{k1,k2,...,kn},需確定1,2,…,n的一種排列p1,p2,...,pnp1,p2,...,pn,使其相應的關鍵字滿足kp1≤kp2≤...≤kpnkp1≤kp2≤...≤kpn(非遞增或非遞減)關系,即使得序列稱為一個按關鍵字有序的序列{rp1,rp2,...,rpn}{rp1,rp2,...,rpn},這樣的操作就稱為排序
排序的穩定性:關鍵字相同的兩條記錄,排序后順序保持不變即為穩定,否則不穩定
內排序是整個排序過程都在內存中進行;外排序是排序過程再內外村之間多次交換數據進行
基本有序:小的關鍵字基本在前面,大的基本在后邊,不大不小的基本在中間
內排序分類:
1)插入排序:直接插入排序、希爾排序
2)交換排序:冒泡排序、快速排序
3)選擇排序:簡單選擇排序、堆排序
4)歸并排序
冒泡排序
1)思想:兩輛比較相鄰記錄,反序交換,直至沒有反序記錄;
2)優化:若某一次迭代中,后續未發生過交換,則全部停止;
3)復雜度:平均O(n2)O(n2),最好O(n)O(n),最壞O(n2)O(n2),空間O(1)O(1),穩定
簡單選擇排序
1)思想:每次從剩余序列中找最小的數值,置換到最前面
2)復雜度:平均O(n2)O(n2),最好O(n2)O(n2),最壞O(n2)O(n2),空間O(1)O(1),穩定
直接插入排序
1)思想:逐漸擴充有序表,每次為記錄尋找插入位置,即依次后移有序表中較大數字
2)復雜度:平均O(n2)O(n2),最好O(n)O(n),最壞O(n2)O(n2),空間O(1)O(1),穩定
希爾排序
1)思想:步長大于1的插入排序,并逐漸降低步長至1
2)復雜度:平均O(nlogn)~O(n2)O(nlog?n)~O(n2),最好O(n1.3)O(n1.3),最壞O(n2)O(n2),空間O(1)O(1),不穩定
堆:完全二叉樹;每個結點的值都小于或等于其左右孩子結點的值,為大頂堆;每個結點值都小于或等于其左右孩子結點的值,為小頂堆
堆排序
1)思想:如大頂堆,每次將堆頂元素移走(或和末尾交換),剩余元素重新構造堆,反復執行直至有序序列
2)復雜度:平均O(nlogn)O(nlog?n),最好O(nlogn)O(nlog?n),最壞O(nlogn)O(nlog?n),空間O(1)O(1),不穩定
3)分析:構建堆需要O(n),之后每次調整需要O(logi)
歸并排序
1)思想:將序列二分拆分為子序列為1的大小,兩兩排序歸并,直到重新獲得n長度的有序序列
2)復雜度:平均O(nlogn)O(nlog?n),最好O(nlogn)O(nlog?n),最壞O(nlogn)O(nlog?n),空間O(n)O(n),穩定
快速排序
1)思想:每次排序將記錄分割為兩部分,一部分均比另一部分小,再分別對兩部分排序
2)復雜度:平均O(nlogn)O(nlog?n),最好O(nlogn)O(nlog?n),最壞O(n2)O(n2),空間O(nlogn)~O(n2)O(nlog?n)~O(n2),不穩定
3)優化:三數取中、尾遞歸
排序的總結:
1)最好情況看,若待排序列基本有序,則不考慮4中復雜算法,考慮冒泡和插入
2)最壞情況看,堆排序與歸并排序更好
3)空間復雜度看,在乎內存使用時,不應選擇歸并和快排
4)穩定性看,在乎穩定性時,歸并好
5)數量上看,n越小越簡單,n越大越改進
6)要減少移動次數時,簡單選擇才比較好
---------------------
作者:煎餅證
來源:CSDN
原文:https://blog.csdn.net/jianbinzheng/article/details/79858736
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!
?
大話數據結構與算法 https://blog.csdn.net/qq_22820783/article/details/86815112
轉載于:https://www.cnblogs.com/highpointengineer/p/10953953.html
總結
以上是生活随笔為你收集整理的《大话数据结构》参考的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何使用Hulu观看晚会与朋友一起看电视
- 下一篇: 学而当自强