數(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斣阪滎^
適合于多棧操作
無(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ù))
插入排序: 略
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)