數(shù)據(jù)結(jié)構(gòu)與算法基礎(chǔ)知識(shí)點(diǎn)

數(shù)據(jù)

元素又稱(chēng)為元素、結(jié)點(diǎn)、記錄是數(shù)據(jù)的基本單位

數(shù)據(jù)項(xiàng)是具有獨(dú)立含義的最小標(biāo)識(shí)單位

數(shù)據(jù)的邏輯結(jié)構(gòu)

數(shù)據(jù)的邏輯結(jié)構(gòu)有以下兩大類(lèi):

線性結(jié)構(gòu):有且僅有一個(gè)開(kāi)始結(jié)點(diǎn)和一個(gè)終端結(jié)點(diǎn),且所有結(jié)點(diǎn)都最多只有一個(gè)直接前驅(qū)和一個(gè)直接后繼。

線性表是一個(gè)典型的線性結(jié)構(gòu)。棧、隊(duì)列、串、數(shù)組等都是線性結(jié)構(gòu)。

非線性結(jié)構(gòu):在該類(lèi)結(jié)構(gòu)中至少存在一個(gè)數(shù)據(jù)元素,它具有兩個(gè)或者兩個(gè)以上的前驅(qū)或后繼.如樹(shù)和二叉樹(shù)

集合結(jié)構(gòu)和多維數(shù)組、廣義表、圖、堆等數(shù)據(jù)結(jié)構(gòu)都是非線性結(jié)構(gòu)。

基本邏輯結(jié)構(gòu)

集合結(jié)構(gòu):數(shù)據(jù)元素的有限集合。數(shù)據(jù)元素之間除了“屬于同一個(gè)集合”的關(guān)系之外沒(méi)有其他關(guān)系。

線性結(jié)構(gòu):數(shù)據(jù)元素的有序集合。數(shù)據(jù)元素之間形成一對(duì)一的關(guān)系。

樹(shù)型結(jié)構(gòu):樹(shù)是層次數(shù)據(jù)結(jié)構(gòu),樹(shù)中數(shù)據(jù)元素之間存在一對(duì)多的關(guān)系。

圖狀結(jié)構(gòu):圖中數(shù)據(jù)元素之間的關(guān)系是多對(duì)多的。

具體例子:

傳統(tǒng)文本(例如書(shū)籍中的文章和計(jì)算機(jī)的文本文件)都是線性結(jié)構(gòu),閱讀是需要注意順序閱讀,而超文本則是一個(gè)非線性結(jié)構(gòu)。在制作文本時(shí),可將寫(xiě)作素材按內(nèi)部聯(lián)系劃分成不同關(guān)系的單元,然后用制作工具將其組成一個(gè)網(wǎng)型結(jié)構(gòu)。閱讀時(shí),不必按線性方式順序往下讀,而是有選擇的閱讀自己感興趣的部分。


算法

是對(duì)特定問(wèn)題求解步驟的一種描述,是指令的有限序列。一個(gè)算法是一系列將輸入轉(zhuǎn)換為輸出的計(jì)算步驟。?

算法的重要特性

輸入:算法應(yīng)該有零個(gè)或多個(gè)輸入。

輸出:算法應(yīng)該有一個(gè)或多個(gè)輸出。

有窮性:算法必須在執(zhí)行有窮步驟之后正常結(jié)束。?

確定性:算法中的每一條指令必須有確切的含義。?

可行性:算法中的每一條指令必須是切實(shí)可執(zhí)行的。

算法設(shè)計(jì)的要求

正確性:算法應(yīng)能正確地實(shí)現(xiàn)預(yù)定功能和要求。

易讀性:算法應(yīng)易于閱讀和理解,便于調(diào)試、修改和擴(kuò)充。

健壯性:對(duì)正確的輸入能得到正確的輸出。當(dāng)遇到非法輸入時(shí)應(yīng)能作適當(dāng)?shù)姆磻?yīng)或處理,而不會(huì)產(chǎn)生不需要或不正確的結(jié)果。

高效性:解決同一問(wèn)題的執(zhí)行時(shí)間越短,算法的時(shí)間效率就越高。

低存儲(chǔ)量:解決同一問(wèn)題的占用存儲(chǔ)空間越少,算法的空間效率就越高。

算法的時(shí)間復(fù)雜度

定義:設(shè)問(wèn)題的規(guī)模為n,把一個(gè)算法的時(shí)間耗費(fèi)T(n)稱(chēng)為該算法的時(shí)間復(fù)雜度,它是問(wèn)題規(guī)模為n的函數(shù)。

常用的算法的時(shí)間復(fù)雜度的順序:(比較時(shí)只看最高次冪)



for ( i = 1 , i < = 10 , i++ ) x=x+c; ? ? ? ? =>O(1)

for ( i = 1 , i < = n , i++ ) x=x+n;? ? ? ? ? =>O(n)

多嵌套一個(gè)for,則為 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?=>O(n^2) 以此類(lèi)推

真題難點(diǎn):i = 1,while(i < = n)

i = i * 3;=>O(log3^n)

i = i * 2;=>O(log2^n) 以此類(lèi)推

程序與算法的區(qū)別

程序可以不滿足有窮性。


線性表(Linear List)

是具有相同數(shù)據(jù)類(lèi)型的數(shù)據(jù)元素的一個(gè)有限序列。通常表示為:(a1,a2,… ai,ai+1… an)

線性表的順序存儲(chǔ)是指用一組地址連續(xù)的存儲(chǔ)單元依次存放線性表的數(shù)據(jù)元素,這種存儲(chǔ)形式的線性表稱(chēng)為順序表。它的特點(diǎn)是線性表中相鄰的元素在內(nèi)存中的存儲(chǔ)位置也是相鄰的。由于線性表中的所有數(shù)據(jù)元素屬于同一類(lèi)型,所以每個(gè)元素在存儲(chǔ)中所占的空間大小相同。

優(yōu)點(diǎn):順序存儲(chǔ)結(jié)構(gòu)內(nèi)存的存儲(chǔ)密度高,可以節(jié)約存儲(chǔ)空間,并可以隨機(jī)或順序地存取結(jié)點(diǎn),但是插入和刪除操作時(shí)往往需要移動(dòng)大量的數(shù)據(jù)元素,并且要預(yù)先分配空間,并要按最大空間分配,因此存儲(chǔ)空間得不到充分的利用,從而影響了運(yùn)行效率。

線性表的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu),它能有效地克服順序存儲(chǔ)方式的不足,同時(shí)也能有效地實(shí)現(xiàn)線性表的擴(kuò)充。

單鏈表和循環(huán)鏈表(循環(huán)鏈表是單鏈表的變形)

線性表的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)是用一組地址任意的存儲(chǔ)單元存放線性表中的數(shù)據(jù)元素。除了存儲(chǔ)其本身的值之外,還必須有一個(gè)指示該元素直接后繼存儲(chǔ)位置的信息,即指出后繼元素的存儲(chǔ)位置。這兩部分信息組成數(shù)據(jù)元素ai的存儲(chǔ)映像,稱(chēng)為結(jié)點(diǎn)(node)。每個(gè)結(jié)點(diǎn)包括兩個(gè)域:一個(gè)域存儲(chǔ)數(shù)據(jù)元素信息,稱(chēng)為數(shù)據(jù)域;另一個(gè)存儲(chǔ)直接后繼存儲(chǔ)位置的域稱(chēng)為指針域。

指針域中存儲(chǔ)的信息稱(chēng)做指針或鏈。N個(gè)結(jié)點(diǎn)鏈結(jié)成一個(gè)鏈表,由于此鏈表的每一個(gè)結(jié)點(diǎn)中包含一個(gè)指針域,故又稱(chēng)線性鏈表或單鏈表

循環(huán)鏈表最后一個(gè)結(jié)點(diǎn)的next指針不為空,而是指向了表的前端。為簡(jiǎn)化操作,在循環(huán)鏈表中往往加入表頭結(jié)點(diǎn)。

循環(huán)鏈表的特點(diǎn)是:只要知道表中某一結(jié)點(diǎn)的地址,就可搜尋到所有其他結(jié)點(diǎn)的地址。

雙向鏈表

雙向鏈表是指在前驅(qū)和后繼方向都能游歷(遍歷)的線性鏈表。

在雙向鏈表結(jié)構(gòu)中,每一個(gè)結(jié)點(diǎn)除了數(shù)據(jù)域外,還包括兩個(gè)指針域,一個(gè)指針指向該結(jié)點(diǎn)的后繼結(jié)點(diǎn),另一個(gè)指針指向它的前趨結(jié)點(diǎn)。通常采用帶表頭結(jié)點(diǎn)的循環(huán)鏈表形式。

用指針實(shí)現(xiàn)表

用數(shù)組實(shí)現(xiàn)表時(shí),利用了數(shù)組單元在物理位置上的鄰接關(guān)系表示表元素之間的邏輯關(guān)系。

優(yōu)點(diǎn)是:

無(wú)須為表示表元素之間的邏輯關(guān)系增加額外的存儲(chǔ)空間。

可以方便地隨機(jī)存取表中任一位置的元素。

缺點(diǎn)是:

插入和刪除運(yùn)算不方便,除表尾位置外,在表的其他位置上進(jìn)行插入或刪除操作都須移動(dòng)大量元素,效率較低。

由于數(shù)組要求占用連續(xù)的存儲(chǔ)空間,因此在分配數(shù)組空間時(shí),只能預(yù)先估計(jì)表的大小再進(jìn)行存儲(chǔ)分配。當(dāng)表長(zhǎng)變化較大時(shí),難以確定數(shù)組的合適的大小


順序表與鏈表的比較

順序表的存儲(chǔ)空間可以是靜態(tài)分配的,也可以是動(dòng)態(tài)分配的。鏈表的存儲(chǔ)空間是動(dòng)態(tài)分配的。

順序表可以隨機(jī)或順序存取。鏈表只能順序存取。

順序表進(jìn)行插入/刪除操作平均需要移動(dòng)近一半元素。鏈表則修改指針不需要移動(dòng)元素。

若插入/刪除僅發(fā)生在表的兩端,宜采用帶尾指針的循環(huán)鏈表。

存儲(chǔ)密度=結(jié)點(diǎn)數(shù)據(jù)本身所占的存儲(chǔ)量/結(jié)點(diǎn)結(jié)構(gòu)所占的存儲(chǔ)總量。

順序表的存儲(chǔ)密度= 1,鏈表的存儲(chǔ)密度< 1。

總結(jié):順序表是用數(shù)組實(shí)現(xiàn)的,鏈表是用指針實(shí)現(xiàn)的。用指針來(lái)實(shí)現(xiàn)的鏈表,結(jié)點(diǎn)空間是動(dòng)態(tài)分配的,鏈表又按鏈接形式的不同,區(qū)分為單鏈表、雙鏈表和循環(huán)鏈表。


棧(stack)

是限定僅在表尾進(jìn)行插入或刪除操作的線性表。棧是一種后進(jìn)先出(Last In First Out)/先進(jìn)后出的線性表,簡(jiǎn)稱(chēng)為L(zhǎng)IFO表

用指針實(shí)現(xiàn)棧—鏈(式)棧鏈?zhǔn)綏?/h4>

無(wú)棧滿問(wèn)題,空間可擴(kuò)充

插入與刪除僅在棧頂處執(zhí)行

鏈?zhǔn)綏5臈m斣阪滎^

適合于多棧操作

鏈棧的基本操作

1)進(jìn)棧運(yùn)算

進(jìn)棧算法思想:

1)為待進(jìn)棧元素x申請(qǐng)一個(gè)新結(jié)點(diǎn),并把x賦給 該結(jié)點(diǎn)的值域。

2)將x結(jié)點(diǎn)的指針域指向棧頂結(jié)點(diǎn)。

3)棧頂指針指向x結(jié)點(diǎn),即使x結(jié)點(diǎn)成為新的棧頂結(jié)點(diǎn)。

具體算法如下:

SNode *Push_L(SNode * top,ElemType x)

{

SNode *p;

p=(SNode*)malloc(sizeof(SNode));

p->data=x;

p->next=top;

top=p;

return? top;

}

2)出棧運(yùn)算

出棧算法思想如下:

1)檢查棧是否為空,若為空,進(jìn)行錯(cuò)誤處理。

2)取棧頂指針的值,并將棧頂指針暫存。

3)刪除棧頂結(jié)點(diǎn)。

SNode *POP_L(SNode * top,ElemType *y)

{SNode *p;

if(top==NULL) return 0;/*鏈棧已空*/

else{

p=top;

*y=p->data;

top=p->next; free(p);

return? top;

}

3)取棧頂元素

具體算法如下:

void gettop(SNode *top)

{

if(top!=NULL)

return(top->data); /*若棧非空,則返回棧頂元素*/

else

return(NULL); /*否則,則返回NULL*/

}

隊(duì)列(Queue)

是只允許在表的一端進(jìn)行插入,而在另一端進(jìn)行刪除的運(yùn)算受限的線性表。其所有的插入均限定在表的一端進(jìn)行,該端稱(chēng)為隊(duì)尾(Rear);所有的刪除則限定在表的另一端進(jìn)行,該端則稱(chēng)為隊(duì)頭(Front)。如果元素按照a1,a2,a3....an的順序進(jìn)入隊(duì)列,則出隊(duì)列的順序不變,也是a1,a2,a3....an。所以隊(duì)列具有先進(jìn)先出(First In First Out,簡(jiǎn)稱(chēng)FIFO)/后進(jìn)后出特性。如車(chē)站排隊(duì)買(mǎi)票,排在隊(duì)頭的處理完走掉,后來(lái)的則必須排在隊(duì)尾等待。在程序設(shè)計(jì)中,比較典型的例子就是操作系統(tǒng)的作業(yè)排隊(duì)。

隊(duì)列的順序存儲(chǔ)結(jié)構(gòu)稱(chēng)為順序隊(duì)列,順序隊(duì)列實(shí)際上是運(yùn)算受限的順序表,和順序表一樣,順序隊(duì)列也是必須用一個(gè)數(shù)組來(lái)存放當(dāng)前隊(duì)列中的元素。由于隊(duì)列的隊(duì)頭和隊(duì)尾的位置是變化的,因而要設(shè)兩個(gè)指針?lè)謩e指示隊(duì)頭和隊(duì)尾元素在隊(duì)列中的位置。

循環(huán)隊(duì)列是為了克服順序隊(duì)列中“假溢出”,通常將一維數(shù)組Sq.elem[0]到Sq.elem.[MaxSize-1]看成是一個(gè)首尾相接的圓環(huán),即Sq.elem[0]與Sq.elem .[maxsize-1]相接在一起。這種形式的順序隊(duì)列稱(chēng)為循環(huán)隊(duì)列。

用線性鏈表表示的隊(duì)列稱(chēng)為鏈隊(duì)列。鏈表的第一個(gè)節(jié)點(diǎn)存放隊(duì)列的隊(duì)首結(jié)點(diǎn),鏈表的最后一個(gè)節(jié)點(diǎn)存放隊(duì)列的隊(duì)尾首結(jié)點(diǎn),隊(duì)尾結(jié)點(diǎn)的鏈接指針為空。另外還需要兩個(gè)指針(頭指針和尾指針)才能唯一確定,頭指針指向隊(duì)首結(jié)點(diǎn),尾指針指向隊(duì)尾結(jié)點(diǎn)

遞歸

定義:若一個(gè)函數(shù)部分地包含它自己或用它自己給自己定義,則稱(chēng)這個(gè)函數(shù)是遞歸的;若一個(gè)算法直接地或間接地調(diào)用自己,則稱(chēng)這個(gè)算法是遞歸的算法。



樹(shù)

①結(jié)點(diǎn)的度:結(jié)點(diǎn)擁有子節(jié)點(diǎn)的個(gè)數(shù)

②樹(shù)的度:該樹(shù)中最大的度數(shù)

③葉子結(jié)點(diǎn):度為零的結(jié)點(diǎn)

④分支結(jié)點(diǎn):度不為零的結(jié)點(diǎn)

⑤內(nèi)部結(jié)點(diǎn):除根結(jié)點(diǎn)之外的分支結(jié)點(diǎn)

⑥開(kāi)始結(jié)點(diǎn):根結(jié)點(diǎn)又稱(chēng)為開(kāi)始結(jié)點(diǎn)

結(jié)點(diǎn)的高度:該結(jié)點(diǎn)到各結(jié)點(diǎn)的最長(zhǎng)路徑的長(zhǎng)度

森林:m(m≥0)棵互不相交的樹(shù)的集合。將一棵非空樹(shù)的根結(jié)點(diǎn)刪去,樹(shù)就變成一個(gè)森林;

反之,給m棵獨(dú)立的樹(shù)增加一個(gè)根結(jié)點(diǎn),并把這m棵樹(shù)作為該結(jié)點(diǎn)的子樹(shù),森林就變成一棵樹(shù)。

2.結(jié)點(diǎn)的層數(shù)和樹(shù)的深度

①結(jié)點(diǎn)的層數(shù):根結(jié)點(diǎn)的層數(shù)為1,其余結(jié)點(diǎn)的層數(shù)等于其雙親結(jié)點(diǎn)的層數(shù)加1。

②堂兄弟:雙親在同一層的結(jié)點(diǎn)互為堂兄弟。

③樹(shù)的深度:樹(shù)中結(jié)點(diǎn)的最大層數(shù)稱(chēng)為樹(shù)的深度。

注意:要弄清結(jié)點(diǎn)的度、樹(shù)的度和樹(shù)的深度的區(qū)別。

樹(shù)中結(jié)點(diǎn)之間的邏輯關(guān)系是“一對(duì)多”的關(guān)系,樹(shù)是一種非線性的結(jié)構(gòu)

樹(shù)的遍歷

先序遍歷:訪問(wèn)根結(jié)點(diǎn)——先序遍歷根的左子樹(shù)——先序遍歷根的右子數(shù)

中序遍歷:中序遍歷左子樹(shù)——訪問(wèn)根結(jié)點(diǎn)——中序遍歷右子樹(shù)

后序遍歷:后序遍歷左子樹(shù)——后序遍歷右子樹(shù)——訪問(wèn)根結(jié)點(diǎn)

最優(yōu)二叉樹(shù)(哈夫曼樹(shù)):最小兩結(jié)點(diǎn)數(shù)相加的值再與次小結(jié)點(diǎn)數(shù)合并。

已知一棵二叉樹(shù)的前根序序列和中根序序列,構(gòu)造該二叉樹(shù)的過(guò)程如下:

1. 根據(jù)前根序序列的第一個(gè)元素建立根結(jié)點(diǎn);

2. 在中根序序列中找到該元素,確定根結(jié)點(diǎn)的左右子樹(shù)的中根序序列;

3. 在前根序序列中確定左右子樹(shù)的前根序序列;

4. 由左子樹(shù)的前根序序列和中根序序列建立左子樹(shù);

5. 由右子樹(shù)的前根序序列和中根序序列建立右子樹(shù)。

-已知一棵二叉樹(shù)的后根序序列和中根序序列,構(gòu)造該二叉樹(shù)的過(guò)程如下:

1. 根據(jù)后根序序列的最后一個(gè)元素建立根結(jié)點(diǎn);

2. 在中根序序列中找到該元素,確定根結(jié)點(diǎn)的左右子樹(shù)的中根序序列;

3. 在后根序序列中確定左右子樹(shù)的后根序序列;

4. 由左子樹(shù)的后根序序列和中根序序列建立左子樹(shù);

5. 由右子樹(shù)的后根序序列和中根序序列建立右子樹(shù)。


G= ( V , E ) = ( 頂點(diǎn),邊)

無(wú)向完全圖有n(n - 1)/ 2 個(gè)邊 ,有向完全圖有n(n - 1)個(gè)邊 。n表結(jié)點(diǎn)。

邊無(wú)向(),弧有向<>

迪杰斯特拉(Dijkstra)算法

是典型的單源最短路徑算法,用于計(jì)算一個(gè)節(jié)點(diǎn)到其他所有節(jié)點(diǎn)的最短路徑。主要特點(diǎn)是以起始點(diǎn)為中心向外層層擴(kuò)展,直到擴(kuò)展到終點(diǎn)為止。Dijkstra算法是很有代表性的最短路徑算法,在很多專(zhuān)業(yè)課程中都作為基本內(nèi)容有詳細(xì)的介紹,如數(shù)據(jù)結(jié)構(gòu),圖論,運(yùn)籌學(xué)等等。注意該算法要求圖中不存在負(fù)權(quán)邊。

弗洛伊德(Floyd)算法<鄰接矩陣求>

是解決任意兩點(diǎn)間的最短路徑的一種算法,可以正確處理有向圖或負(fù)權(quán)的最短路徑問(wèn)題,同時(shí)也被用于計(jì)算有向圖的傳遞閉包。Floyd-Warshall算法的時(shí)間復(fù)雜度為O(N3),空間復(fù)雜度為O(N2)。

普里姆(Prim)算法

普里姆算法的基本思想:

從連通網(wǎng)絡(luò)N= {V,E}中的某一頂點(diǎn)u0出發(fā),選擇與它關(guān)聯(lián)的具有最小權(quán)值的邊(u0,v),將其頂點(diǎn)加入到生成樹(shù)頂點(diǎn)集合S中。以后每一步從一個(gè)頂點(diǎn)在S中而另一個(gè)頂點(diǎn)不在S中的各條邊中選擇權(quán)值最小的邊(u,v),把它的頂點(diǎn)加入到集合S中。如此繼續(xù)下去,直到網(wǎng)絡(luò)中的所有頂點(diǎn)都加入到生成樹(shù)頂點(diǎn)集合S中為止。

克魯斯卡爾(Kruskal)算法

克魯斯卡爾算法的基本思想:

設(shè)有一個(gè)有n個(gè)頂點(diǎn)的連通網(wǎng)絡(luò)N= {V,E},最初先構(gòu)造一個(gè)只有n個(gè)頂點(diǎn),沒(méi)有邊的非連通圖T= {V,?},圖中每個(gè)頂點(diǎn)自成一個(gè)連通分支。當(dāng)在E中選到一條具有最小權(quán)值的邊時(shí),若該邊的兩個(gè)頂點(diǎn)落在不同的連通分支上,則將此邊加入到T中;否則將此邊舍去,重新選擇一條權(quán)值最小的邊。如此重復(fù)下去,直到所有頂點(diǎn)在同一個(gè)連通分支上為止。


排序

冒泡排序:比較相鄰2數(shù),大的數(shù)后移小的數(shù)前移選出max/min(反之亦可)

如:有 ?4 ?3 ?1 ?7 ?2 ?5,i = 1時(shí):1 ?4 ?3 ? 2 ?7 ?5(兩兩相比

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? i = 2時(shí):1 ? 2 ? 4 ?3 ?5 ?7

簡(jiǎn)單選擇排序:首先在所有記錄中選出排序碼最小的記錄,與第一個(gè)記錄交換,然后在其余的記錄中再選出排序碼最小的記錄與第二個(gè)記錄交換,以此類(lèi)推,直到所有的記錄排好序?yàn)橹埂?/p>

如:有 3 ?2 ?4 ?1 , i = 1時(shí):1 ?2 ?4 ?3

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?i = 2時(shí):1 ?2 ?3 ?4

快速排序:被廣泛認(rèn)為它是解決一般問(wèn)題的最佳排序算法,它比較適合解決大規(guī)模數(shù)據(jù)的排序。

快速排序首先選取一個(gè)“基準(zhǔn)數(shù)”通過(guò)基準(zhǔn)數(shù)將大于它和小于它的數(shù)無(wú)序地放在基準(zhǔn)數(shù)的兩邊

如:有 4 ?3 ?1 ?7 ?2 ?5 , i = 1時(shí):3 ?1 ?2 ?4 ?5 ?7(以4為基準(zhǔn)數(shù))

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?i = 2時(shí):1 ?2 ?3 ?4 ?5 ?7(以3為基準(zhǔn)數(shù))

插入排序: 略

排序小結(jié)

1、就平均時(shí)間性能而言,快速排序最佳。但在最壞情況下不如堆排序和歸并排序。(歸并排序?qū)較大時(shí)適用)

2、當(dāng)序列中的記錄“基本有序”或n值較小時(shí),直接插入排序是最佳的方法,因此常將它與其他排序方法結(jié)合使用,如快速排序、歸并排序等。

3、基數(shù)排序的時(shí)間復(fù)雜度也可寫(xiě)成O(d*n),因此它最適用于n值很大而關(guān)鍵字較小的序列。

4、穩(wěn)定的排序方法:簡(jiǎn)單排序。不穩(wěn)定的排序方法:快速排序、堆排序。

一般來(lái)說(shuō),排序過(guò)程中的“比較”是在相鄰的兩個(gè)記錄的關(guān)鍵字之間進(jìn)行的排序方法是穩(wěn)定的。

代碼實(shí)現(xiàn)著重看:表/棧/隊(duì)列/遞歸的插入和刪除的實(shí)現(xiàn)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,963評(píng)論 6 542
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,348評(píng)論 3 429
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 178,083評(píng)論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 63,706評(píng)論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,442評(píng)論 6 412
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 55,802評(píng)論 1 328
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,795評(píng)論 3 446
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 42,983評(píng)論 0 290
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,542評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 41,287評(píng)論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,486評(píng)論 1 374
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,030評(píng)論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,710評(píng)論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 35,116評(píng)論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 36,412評(píng)論 1 294
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 52,224評(píng)論 3 398
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,462評(píng)論 2 378

推薦閱讀更多精彩內(nèi)容