diff --git a/Code/Code/head/sort.h b/Code/Code/head/sort.h
index 337d904..f64a570 100644
--- a/Code/Code/head/sort.h
+++ b/Code/Code/head/sort.h
@@ -63,4 +63,22 @@ bool ShellSort(LinearTable table) {
}
}
return true;
+}
+
+// ðÅÝÅÅÐò
+bool BubbleSort(LinearTable table){
+ elem_type temp;
+ // ÍâÑ»·ÎªÅÅÐòÌËÊý£¬Ò»¹²ÐèÒªlength-1ÌË
+ for(int i=0;i
table.data[j+1]){
+ temp = table.data[j];
+ table.data[j] = table.data[j+1];
+ table.data[j+1] = temp;
+ }
+ }
+ }
+ return true;
}
\ No newline at end of file
diff --git a/Data-Structrue/10-sort-ex.md b/Data-Structrue/10-sort-ex.md
index eb10dfc..0b256fd 100644
--- a/Data-Structrue/10-sort-ex.md
+++ b/Data-Structrue/10-sort-ex.md
@@ -15,3 +15,15 @@ $D.6$
解:$A$。对于任æ„åºåˆ—进行基于比较的排åºï¼Œæ±‚æœ€å°‘çš„æ¯”è¾ƒæ¬¡æ•°åº”è€ƒè™‘æœ€åæƒ…况。对任æ„$n$ä¸ªå…³é”®å—æŽ’åºçš„æ¯”较次数至少$\lceil\log_2(n!)\rceil$。将$n=7$代入公å¼ï¼Œç”案为$13$。上述公å¼è¯æ˜Žå¦‚下(仅供有兴趣的åŒå¦å‚è€ƒï¼‰ï¼šåœ¨åŸºäºŽæ¯”è¾ƒçš„æŽ’åºæ–¹æ³•ä¸ï¼Œæ¯æ¬¡æ¯”较两个关键å—åŽï¼Œä»…出现两ç§å¯èƒ½çš„转移。å‡è®¾æ•´ä¸ªæŽ’åºè¿‡ç¨‹è‡³å°‘需è¦åš$t$次比较,则显然会有$2^t$ç§æƒ…况。由于$n$个记录共有$n!$ç§ä¸åŒçš„æŽ’åˆ—ï¼Œå› è€Œå¿…é¡»æœ‰$n!$ç§ä¸åŒçš„æ¯”较路径,于是有$2^t\geqslant n!$,å³$t\geqslant\log_2(n!)$。考虑到$t$为整数,故为$\lceil\log_2(n!)\rceil$。
## æ’入排åº
+
+**例题** 有些排åºç®—法在æ¯è¶ŸæŽ’åºè¿‡ç¨‹ä¸ï¼Œéƒ½ä¼šæœ‰ä¸€ä¸ªå…ƒç´ 被放置到其最终ä½ç½®ä¸Šï¼Œ()算法ä¸ä¼šå‡ºçްæ¤ç§æƒ…况。
+
+$A.$希尔排åº
+
+$B.$å †æŽ’åº
+
+$C.$冒泡排åº
+
+$D.$快速排åº
+
+解:$A$ã€‚å¸Œå°”æŽ’åºæ˜¯ç»„间有åºç»„å†…æ— åºã€‚
diff --git a/Data-Structrue/10-sort.md b/Data-Structrue/10-sort.md
index 70c5142..767f693 100644
--- a/Data-Structrue/10-sort.md
+++ b/Data-Structrue/10-sort.md
@@ -63,7 +63,7 @@
希尔排åºä¹Ÿæ˜¯å¯¹ç›´æŽ¥æ’入排åºçš„优化。直接æ’入排åºå¯¹äºŽåŸºæœ¬æœ‰åºçš„åºåˆ—æŽ’åºæ•ˆæžœè¾ƒå¥½ï¼Œæ‰€ä»¥å°±å¸Œæœ›åºåˆ—能尽å¯èƒ½åŸºæœ¬æœ‰åºã€‚从而希尔排åºçš„æ€æƒ³å°±æ˜¯å…ˆè¿½æ±‚è¡¨ä¸å…ƒç´ 部分有åºï¼Œç„¶åŽé€æ¸é€¼è¿‘全局有åºã€‚
-先将整个待排åºå…ƒç´ åºåˆ—分割æˆè‹¥å¹²ä¸ªååºåˆ—(由相隔æŸä¸ªâ€œå¢žé‡â€çš„å…ƒç´ ç»„æˆçš„),分别进行直接æ’入排åºï¼ˆæˆ–è€…æŠ˜åŠæ’入排åºï¼‰ï¼Œç„¶åŽç¼©å°å¢žé‡é‡å¤ä¸Šè¿°è¿‡ç¨‹ï¼Œç›´åˆ°å¢žé‡ä¸º$1$ã€‚æ¯æ¬¡å¯¹æ¯”åªå¯¹æ¯”ä¸¤ä¸ªå…ƒç´ è¿›è¡Œæ’入交æ¢ã€‚
+先将整个待排åºå…ƒç´ åºåˆ—分割æˆè‹¥å¹²ä¸ªååºåˆ—(由相隔æŸä¸ªâ€œå¢žé‡â€çš„å…ƒç´ ç»„æˆçš„),分别进行直接æ’入排åºï¼Œç„¶åŽç¼©å°å¢žé‡é‡å¤ä¸Šè¿°è¿‡ç¨‹ï¼Œç›´åˆ°å¢žé‡ä¸º$1$ã€‚æ¯æ¬¡å¯¹æ¯”åªå¯¹æ¯”ä¸¤ä¸ªä»¥ä¸Šçš„ä¸ªå…ƒç´ è¿›è¡Œæ’入交æ¢ã€‚
增é‡åºåˆ—çš„é€‰æ‹©å»ºè®®æ˜¯ç¬¬ä¸€è¶Ÿé€‰æ‹©å…ƒç´ ä¸ªæ•°çš„ä¸€åŠï¼ŒåŽé¢ä¸æ–缩å°åˆ°åŽŸæ¥çš„一åŠã€‚
@@ -85,13 +85,15 @@
#### 冒泡排åºçš„过程
-从åŽå¾€å‰æˆ–从å‰å¾€åŽä¸¤ä¸¤æ¯”è¾ƒç›¸é‚»å…ƒç´ çš„å€¼ï¼Œè‹¥é€†åºåˆ™äº¤æ¢è¿™ä¸¤ä¸ªå€¼ï¼Œå¦‚果相ç‰ä¹Ÿä¸äº¤æ¢ï¼Œç›´åˆ°åºåˆ—比较完。这个过程是一趟冒泡排åºï¼Œç¬¬$i$è¶ŸåŽç¬¬iä¸ªå…ƒç´ ä¼šå·²ç»æŽ’åºå®Œæˆã€‚æ¯ä¸€è¶Ÿéƒ½ä¼šè®©å…³é”®å—æœ€å°æˆ–æœ€å¤§çš„ä¸€ä¸ªå…ƒç´ åˆ°æœªæŽ’åºé˜Ÿåˆ—的第一个或最åŽä¸€ä¸ªã€‚一共需è¦$n-1$趟排åºã€‚
+从åŽå¾€å‰æˆ–从å‰å¾€åŽä¸¤ä¸¤æ¯”è¾ƒç›¸é‚»å…ƒç´ çš„å€¼ï¼Œè‹¥é€†åºåˆ™äº¤æ¢è¿™ä¸¤ä¸ªå€¼ï¼Œå¦‚果相ç‰ä¹Ÿä¸äº¤æ¢ï¼Œç›´åˆ°åºåˆ—比较完。这个过程是一趟冒泡排åºï¼Œç¬¬$i$è¶ŸåŽç¬¬$i$ä¸ªå…ƒç´ ä¼šå·²ç»æŽ’åºå®Œæˆã€‚æ¯ä¸€è¶Ÿéƒ½ä¼šè®©å…³é”®å—æœ€å°æˆ–æœ€å¤§çš„ä¸€ä¸ªå…ƒç´ åˆ°æœªæŽ’åºé˜Ÿåˆ—的第一个或最åŽä¸€ä¸ªã€‚一共需è¦$n-1$趟排åºã€‚
+
+冒泡排åºä¸æ‰€äº§ç”Ÿçš„æœ‰åºååºåˆ—一定是全局有åºçš„(ä¸åŒäºŽç›´æŽ¥æ’入排åºï¼‰ï¼Œä¹Ÿå°±æ˜¯è¯´ï¼Œæœ‰åºååºåˆ—ä¸çš„æ‰€æœ‰å…ƒç´ 的关键å—一定å°äºŽæˆ–å¤§äºŽæ— åºååºåˆ—䏿‰€æœ‰å…ƒç´ 的关键å—ï¼Œè¿™æ ·æ¯è¶ŸæŽ’åºéƒ½ä¼šå°†ä¸€ä¸ªå…ƒç´ 放置到其最终的ä½ç½®ä¸Šã€‚
#### 冒泡排åºçš„æ€§èƒ½
ç©ºé—´å¤æ‚度为$O(1)$。
-æœ€å¥½æƒ…å†µä¸‹å³æœ¬èº«åºåˆ—有åºï¼Œåˆ™æ¯”较次数是n-1ï¼Œäº¤æ¢æ¬¡æ•°æ˜¯0ï¼Œä»Žè€Œæ—¶é—´å¤æ‚度是$O(n)$。
+æœ€å¥½æƒ…å†µä¸‹å³æœ¬èº«åºåˆ—有åºï¼Œåˆ™æ¯”较次数是$n-1$ï¼Œäº¤æ¢æ¬¡æ•°æ˜¯$0$ï¼Œä»Žè€Œæ—¶é—´å¤æ‚度是$O(n)$。
æœ€åæƒ…å†µæ˜¯é€†åºæƒ…å†µï¼Œæ¯”è¾ƒæ¬¡æ•°å’Œäº¤æ¢æ¬¡æ•°éƒ½æ˜¯$\dfrac{n(n-1)}{2}$ï¼Œæ‰€ä»¥æ—¶é—´å¤æ‚度是$O(n^2)$。
@@ -103,22 +105,22 @@
### 快速排åº
-快速排åºåœ¨å†…部排åºä¸çš„表现确实是最好的。排åºè¿‡ç¨‹ç±»ä¼¼äºŽæž„å»ºäºŒå‰æŽ’åºæ ‘。
+快速排åºåœ¨å†…部排åºä¸çš„表现确实是最好的。排åºè¿‡ç¨‹ç±»ä¼¼äºŽæž„å»ºäºŒå‰æŽ’åºæ ‘。基于分治法。
#### 快速排åºçš„过程
-å–待排åºåºåˆ—ä¸çš„æŸä¸ªå…ƒç´ pivot作为基准(一般å–ç¬¬ä¸€ä¸ªå…ƒç´ ï¼‰ï¼Œé€šè¿‡ä¸€è¶ŸæŽ’åºï¼Œå°†å¾…æŽ’å…ƒç´ åˆ†ä¸ºå·¦å³ä¸¤ä¸ªååºåˆ—,左ååºåˆ—å…ƒç´ çš„å…³é”®å—å‡å°äºŽæˆ–ç‰äºŽåŸºå‡†å…ƒç´ 的关键å—,å³ååºåˆ—的关键å—åˆ™å¤§äºŽåŸºå‡†å…ƒç´ çš„å…³é”®å—,然åŽåˆ†åˆ«å¯¹ä¸¤ä¸ªååºåˆ—ç»§ç»è¿›è¡ŒæŽ’åºï¼Œç›´è‡³æ•´ä¸ªåºåˆ—有åºã€‚
+å–待排åºåºåˆ—ä¸çš„æŸä¸ªå…ƒç´ $pivot$作为基准(一般å–ç¬¬ä¸€ä¸ªå…ƒç´ ï¼‰ï¼Œé€šè¿‡ä¸€è¶ŸæŽ’åºï¼Œå°†å¾…æŽ’å…ƒç´ åˆ†ä¸ºå·¦å³ä¸¤ä¸ªååºåˆ—,左ååºåˆ—å…ƒç´ çš„å…³é”®å—å‡å°äºŽæˆ–ç‰äºŽåŸºå‡†å…ƒç´ 的关键å—,å³ååºåˆ—的关键å—åˆ™å¤§äºŽåŸºå‡†å…ƒç´ çš„å…³é”®å—,称进行了一趟快速排åºï¼ˆä¸€æ¬¡åˆ’分),然åŽåˆ†åˆ«å¯¹ä¸¤ä¸ªååºåˆ—ç»§ç»è¿›è¡ŒæŽ’åºï¼Œç›´è‡³æ•´ä¸ªåºåˆ—有åºã€‚
-1. å…ˆé€‰æ‹©ä¸ªå€¼åšæ ‡æ†ï¼ŒæŠŠæ ‡æ†æ”¾å…¥pivotï¼Œæ¯”æ ‡æ†å°çš„æ”¾å·¦è¾¹ï¼Œå¤§çš„æ”¾å³è¾¹ã€‚
-2. åˆå§‹æ—¶ï¼Œä»¤high指å‘åºåˆ—最å³è¾¹çš„值,low指å‘åºåˆ—最左边的值。
-3. ç„¶åŽä»Žhigh开始,当é‡åˆ°æ¯”æ ‡æ†å¤§çš„值时high--。
-4. 当é‡åˆ°æ¯”æ ‡æ†å°çš„值,就å–出这个值放入当å‰low所指的ä½ç½®ã€‚
-5. ç„¶åŽhighä¸åŠ¨ï¼Œlow++开始移动。
-6. è‹¥low所指å‘çš„å€¼æ¯”æ ‡æ†å°ï¼Œlow++。
-7. è‹¥low所指å‘çš„å€¼æ¯”æ ‡æ†å¤§ï¼Œåˆ™æ”¾å…¥å½“å‰high所指å‘çš„ä½ç½®ã€‚
-8. ç„¶åŽlowä¸åŠ¨ï¼Œhigh--开始移动。回到æ¥éª¤ä¸‰å¼€å§‹æ‰§è¡Œã€‚
-9. 当low=high时表示lowå’Œhigh之å‰çš„å…ƒç´ éƒ½æ¯”åŸºå‡†å°ï¼Œlowå’Œhigh之åŽçš„å…ƒç´ éƒ½æ¯”åŸºå‡†å¤§ï¼Œå®Œæˆäº†ä¸€æ¬¡åˆ’åˆ†ã€‚ç„¶åŽæŠŠåŸºå‡†å…ƒç´ æ”¾å…¥lowå’Œhigh指å‘çš„ä½ç½®ã€‚
-10. 䏿–交替使用lowå’Œhigh指针进行对比。对左å³ååºåˆ—è¿›è¡ŒåŒæ ·çš„递归æ“作å³å¯ï¼Œä»Žæ¥éª¤ä¸‰å¼€å§‹ã€‚若左å³ä¸¤ä¸ªååºåˆ—çš„å…ƒç´ æ•°é‡ç‰äºŽä¸€ï¼Œåˆ™æ— 需å†åˆ’分。
+1. å…ˆé€‰æ‹©ä¸ªå€¼åšæ ‡æ†ï¼ŒæŠŠæ ‡æ†æ”¾å…¥$pivot$ï¼Œæ¯”æ ‡æ†å°çš„æ”¾å·¦è¾¹ï¼Œå¤§çš„æ”¾å³è¾¹ã€‚
+2. åˆå§‹æ—¶ï¼Œä»¤$high$指å‘åºåˆ—最å³è¾¹çš„值,$low$指å‘åºåˆ—最左边的值。
+3. ç„¶åŽä»Ž$high$开始,当é‡åˆ°æ¯”æ ‡æ†å¤§çš„值时$high--$。
+4. 当é‡åˆ°æ¯”æ ‡æ†å°çš„值,就å–出这个值放入当å‰$low$所指的ä½ç½®ã€‚
+5. ç„¶åŽ$high$ä¸åŠ¨ï¼Œ$low++$开始移动。
+6. è‹¥$low$所指å‘çš„å€¼æ¯”æ ‡æ†å°ï¼Œ$low++$。
+7. è‹¥$low$所指å‘çš„å€¼æ¯”æ ‡æ†å¤§ï¼Œåˆ™æ”¾å…¥å½“å‰$high$所指å‘çš„ä½ç½®ã€‚
+8. ç„¶åŽ$low$ä¸åŠ¨ï¼Œ$high--$开始移动。回到æ¥éª¤ä¸‰å¼€å§‹æ‰§è¡Œã€‚
+9. 当$low=high$时表示$low$å’Œ$high$之å‰çš„å…ƒç´ éƒ½æ¯”åŸºå‡†å°ï¼Œ$low$å’Œ$high$之åŽçš„å…ƒç´ éƒ½æ¯”åŸºå‡†å¤§ï¼Œå®Œæˆäº†ä¸€æ¬¡åˆ’åˆ†ã€‚ç„¶åŽæŠŠåŸºå‡†å…ƒç´ æ”¾å…¥$low$å’Œ$high$指å‘çš„ä½ç½®ã€‚
+10. 䏿–交替使用$low$å’Œ$high$指针进行对比。对左å³ååºåˆ—è¿›è¡ŒåŒæ ·çš„递归æ“作å³å¯ï¼Œä»Žæ¥éª¤ä¸‰å¼€å§‹ã€‚若左å³ä¸¤ä¸ªååºåˆ—çš„å…ƒç´ æ•°é‡ç‰äºŽä¸€ï¼Œåˆ™æ— 需å†åˆ’分。
#### 快速排åºçš„æ€§èƒ½