加油?。。?一、排列組合部分是中學(xué)數(shù)學(xué)中的難點(diǎn)之一,原因在于 (1)從千差萬(wàn)別的實(shí)際問(wèn)題中抽象出幾種特定的數(shù)學(xué)模型,需要較強(qiáng)的抽象思維能力; (2)限制條件有時(shí)比較隱晦,需要我們對(duì)問(wèn)題中的關(guān)鍵性詞(特別是邏輯關(guān)聯(lián)詞和量詞)準(zhǔn)確理解; (3)計(jì)算手段簡(jiǎn)單,與舊知識(shí)聯(lián)系少,但選擇正確合理的計(jì)算方案時(shí)需要的思維量較大; (4)計(jì)算方案是否正確,往往不可用直觀方法來(lái)檢驗(yàn),要求我們搞清概念、原理,并具有較強(qiáng)的分析能力。
二、兩個(gè)基本計(jì)數(shù)原理及應(yīng)用 (1)加法原理和分類(lèi)計(jì)數(shù)法 1.加法原理 2.加法原理的集合形式 3.分類(lèi)的要求 每一類(lèi)中的每一種方法都可以獨(dú)立地完成此任務(wù);兩類(lèi)不同辦法中的具體方法,互不相同(即分類(lèi)不重);完成此任務(wù)的任何一種方法,都屬于某一類(lèi)(即分類(lèi)不漏) (2)乘法原理和分步計(jì)數(shù)法 1.乘法原理 2.合理分步的要求 任何一步的一種方法都不能完成此任務(wù),必須且只須連續(xù)完成這n步才能完成此任務(wù);各步計(jì)數(shù)相互獨(dú)立;只要有一步中所采取的方法不同,則對(duì)應(yīng)的完成此事的方法也不同 [例題分析]排列組合思維方法選講 1.首先明確任務(wù)的意義 例1. 從1、2、3、……、20這二十個(gè)數(shù)中任取三個(gè)不同的數(shù)組成等差數(shù)列,這樣的不同等差數(shù)列有________個(gè)。 分析:首先要把復(fù)雜的生活背景或其它數(shù)學(xué)背景轉(zhuǎn)化為一個(gè)明確的排列組合問(wèn)題。
設(shè)a,b,c成等差,∴ 2b=a+c, 可知b由a,c決定, 又∵ 2b是偶數(shù),∴ a,c同奇或同偶,即:從1,3,5,……,19或2,4,6,8,……,20這十個(gè)數(shù)中選出兩個(gè)數(shù)進(jìn)行排列,由此就可確定等差數(shù)列,因而本題為2=180。 例2. 某城市有4條東西街道和6條南北的街道,街道之間的間距相同,如圖。
若規(guī)定只能向東或向北兩個(gè)方向沿圖中路線前進(jìn),則從M到N有多少種不同的走法? 分析:對(duì)實(shí)際背景的分析可以逐層深入 (一)從M到N必須向上走三步,向右走五步,共走八步。 (二)每一步是向上還是向右,決定了不同的走法。
(三)事實(shí)上,當(dāng)把向上的步驟決定后,剩下的步驟只能向右。 從而,任務(wù)可敘述為:從八個(gè)步驟中選出哪三步是向上走,就可以確定走法數(shù), ∴ 本題答案為:=56。
2.注意加法原理與乘法原理的特點(diǎn),分析是分類(lèi)還是分步,是排列還是組合 例3.在一塊并排的10壟田地中,選擇二壟分別種植A,B兩種作物,每種種植一壟,為有利于作物生長(zhǎng),要求A,B兩種作物的間隔不少于6壟,不同的選法共有______種。 分析:條件中“要求A、B兩種作物的間隔不少于6壟”這個(gè)條件不容易用一個(gè)包含排列數(shù),組合數(shù)的式子表示,因而采取分類(lèi)的方法。
第一類(lèi):A在第一壟,B有3種選擇; 第二類(lèi):A在第二壟,B有2種選擇; 第三類(lèi):A在第三壟,B有一種選擇, 同理A、B位置互換 ,共12種。 例4.從6雙不同顏色的手套中任取4只,其中恰好有一雙同色的取法有________。
(A)240 (B)180 (C)120 (D)60 分析:顯然本題應(yīng)分步解決。 (一)從6雙中選出一雙同色的手套,有種方法; (二)從剩下的十只手套中任選一只,有種方法。
(三)從除前所涉及的兩雙手套之外的八只手套中任選一只,有種方法; (四)由于選取與順序無(wú)關(guān),因而(二)(三)中的選法重復(fù)一次,因而共240種。 例5.身高互不相同的6個(gè)人排成2橫行3縱列,在第一行的每一個(gè)人都比他同列的身后的人個(gè)子矮,則所有不同的排法種數(shù)為_(kāi)______。
分析:每一縱列中的兩人只要選定,則他們只有一種站位方法,因而每一縱列的排隊(duì)方法只與人的選法有關(guān)系,共有三縱列,從而有=90種。 例6.在11名工人中,有5人只能當(dāng)鉗工,4人只能當(dāng)車(chē)工,另外2人能當(dāng)鉗工也能當(dāng)車(chē)工。
現(xiàn)從11人中選出4人當(dāng)鉗工,4人當(dāng)車(chē)工,問(wèn)共有多少種不同的選法? 分析:采用加法原理首先要做到分類(lèi)不重不漏,如何做到這一點(diǎn)?分類(lèi)的標(biāo)準(zhǔn)必須前后統(tǒng)一。 以?xún)蓚€(gè)全能的工人為分類(lèi)的對(duì)象,考慮以他們當(dāng)中有幾個(gè)去當(dāng)鉗工為分類(lèi)標(biāo)準(zhǔn)。
第一類(lèi):這兩個(gè)人都去當(dāng)鉗工,有種; 第二類(lèi):這兩人有一個(gè)去當(dāng)鉗工,有種; 第三類(lèi):這兩人都不去當(dāng)鉗工,有種。 因而共有185種。
例7.現(xiàn)有印著0,l,3,5,7,9的六張卡片,如果允許9可以作6用,那么從中任意抽出三張可以組成多少個(gè)不同的三位數(shù)? 分析:有同學(xué)認(rèn)為只要把0,l,3,5,7,9的排法數(shù)乘以2即為所求,但實(shí)際上抽出的三個(gè)數(shù)中有9的話才可能用6替換,因而必須分類(lèi)。 抽出的三數(shù)含0,含9,有種方法; 抽出的三數(shù)含0不含9,有種方法; 抽出的三數(shù)含9不含0,有種方法; 抽出的三數(shù)不含9也不含0,有種方法。
又因?yàn)閿?shù)字9可以當(dāng)6用,因此共有2*(+)++=144種方法。 例8.停車(chē)場(chǎng)劃一排12個(gè)停車(chē)位置,今有8輛車(chē)需要停放,要求空車(chē)位連在一起,不同的停車(chē)方法是________種。
分析:把空車(chē)位看成一個(gè)元素,和8輛車(chē)共九個(gè)元素排列,因而共有種停車(chē)方法。 3.特殊元素,優(yōu)先處理;特殊位置,優(yōu)先考慮 例9.六人站成一排,求 (1)甲不在排頭,乙不在排尾的排列數(shù) (2)甲不在排頭,乙不在排尾,且甲乙不相鄰的排法數(shù) 分析:(1)先考慮排頭,排尾,但這兩個(gè)要求相互有影響,因而考慮分類(lèi)。
第一類(lèi):乙在排頭,有種站法。 第二類(lèi):乙不在排頭,當(dāng)然他也不能在排尾,有種站法, 共+種站法。
(2)第一類(lèi)。
最低0.27元/天開(kāi)通百度文庫(kù)會(huì)員,可在文庫(kù)查看完整內(nèi)容> 原發(fā)布者:520ruiqi 排列組合方法歸納大全復(fù)習(xí)鞏固1.分類(lèi)計(jì)數(shù)原理(加法原理)完成一件事,有類(lèi)辦法,在第1類(lèi)辦法中有種不同的方法,在第2類(lèi)辦法中有種不同的方法,…,在第類(lèi)辦法中有種不同的方法,那么完成這件事共有:種不同的方法.2.分步計(jì)數(shù)原理(乘法原理)完成一件事,需要分成個(gè)步驟,做第1步有種不同的方法,做第2步有種不同的方法,…,做第步有種不同的方法,那么完成這件事共有:種不同的方法.3.分類(lèi)計(jì)數(shù)原理分步計(jì)數(shù)原理區(qū)別分類(lèi)計(jì)數(shù)原理方法相互獨(dú)立,任何一種方法都可以獨(dú)立地完成這件事。
分步計(jì)數(shù)原理各步相互依存,每步中的方法完成事件的一個(gè)階段,不能完成整個(gè)事件.解決排列組合綜合性問(wèn)題的一般過(guò)程如下:1.認(rèn)真審題弄清要做什么事2.怎樣做才能完成所要做的事,即采取分步還是分類(lèi),或是分步與分類(lèi)同時(shí)進(jìn)行,確定分多少步及多少類(lèi)。3.確定每一步或每一類(lèi)是排列問(wèn)題(有序)還是組合(無(wú)序)問(wèn)題,元素總數(shù)是多少及取出多少個(gè)元素.4.解決排列組合綜合性問(wèn)題,往往類(lèi)與步交叉,因此必須掌握一些常用的解題策略一.特殊元素和特殊位置優(yōu)先策略例1.由0,1,2,3,4,5可以組成多少個(gè)沒(méi)有重復(fù)數(shù)字五位奇數(shù).解:由于末位和首位有特殊要求,應(yīng)該優(yōu)先安排,以免不合要求的元素占了這兩個(gè)位置.先排末位共有然后排首位共有最后排其它位置共有由分步計(jì)數(shù)原理得練習(xí)題:7種不同的花種在排成一列的花盆里,若兩種葵花不種在中間,也不種在兩端的花盆里,問(wèn)有多少不同的種法?二.相鄰元素捆綁策略例2.7。
排序算法 所謂排序,就是使一串記錄,按照其中的某個(gè)或某些關(guān)鍵字的大小,遞增或遞減的排列起來(lái)的操作。
分類(lèi) 在計(jì)算機(jī)科學(xué)所使用的排序算法通常被分類(lèi)為: 計(jì)算的復(fù)雜度(最差、平均、和最好表現(xiàn)),依據(jù)串列(list)的大小(n)。一般而言,好的表現(xiàn)是O。
(n log n),且壞的行為是Ω(n2)。對(duì)於一個(gè)排序理想的表現(xiàn)是O(n)。
僅使用一個(gè)抽象關(guān)鍵比較運(yùn)算的排序算法總平均上總是至少需要Ω(n log n)。 記憶體使用量(以及其他電腦資源的使用) 穩(wěn)定度:穩(wěn)定排序算法會(huì)依照相等的關(guān)鍵(換言之就是值)維持紀(jì)錄的相對(duì)次序。
也就是一個(gè)排序算法是穩(wěn)定的,就是當(dāng)有兩個(gè)有相等關(guān)鍵的紀(jì)錄R和S,且在原本的串列中R出現(xiàn)在S之前,在排序過(guò)的串列中R也將會(huì)是在S之前。 一般的方法:插入、交換、選擇、合并等等。
交換排序包含冒泡排序(bubble sort)和快速排序(quicksort)。選擇排序包含shaker排序和堆排序(heapsort)。
當(dāng)相等的元素是無(wú)法分辨的,比如像是整數(shù),穩(wěn)定度并不是一個(gè)問(wèn)題。然而,假設(shè)以下的數(shù)對(duì)將要以他們的第一個(gè)數(shù)字來(lái)排序。
(4, 1) (3, 1) (3, 7) (5, 6) 在這個(gè)狀況下,有可能產(chǎn)生兩種不同的結(jié)果,一個(gè)是依照相等的鍵值維持相對(duì)的次序,而另外一個(gè)則沒(méi)有: (3, 1) (3, 7) (4, 1) (5, 6) (維持次序) (3, 7) (3, 1) (4, 1) (5, 6) (次序被改變) 不穩(wěn)定排序算法可能會(huì)在相等的鍵值中改變紀(jì)錄的相對(duì)次序,但是穩(wěn)定排序算法從來(lái)不會(huì)如此。不穩(wěn)定排序算法可以被特別地時(shí)作為穩(wěn)定。
作這件事情的一個(gè)方式是人工擴(kuò)充鍵值的比較,如此在其他方面相同鍵值的兩個(gè)物件間之比較,就會(huì)被決定使用在原先資料次序中的條目,當(dāng)作一個(gè)同分決賽。然而,要記住這種次序通常牽涉到額外的空間負(fù)擔(dān)。
排列算法列表 在這個(gè)表格中,n是要被排序的紀(jì)錄數(shù)量以及k是不同鍵值的數(shù)量。 穩(wěn)定的 冒泡排序(bubble sort) — O(n2) 雞尾酒排序 (Cocktail sort, 雙向的冒泡排序) — O(n2) 插入排序 (insertion sort)— O(n2) 桶排序 (bucket sort)— O(n); 需要 O(k) 額外 記憶體 計(jì)數(shù)排序 (counting sort) — O(n+k); 需要 O(n+k) 額外 記憶體 歸并排序 (merge sort)— O(n log n); 需要 O(n) 額外記憶體 原地歸并排序 — O(n2) 二叉樹(shù)排序 (Binary tree sort) — O(n log n); 需要 O(n) 額外記憶體 鴿巢排序 (Pigeonhole sort) — O(n+k); 需要 O(k) 額外記憶體 基數(shù)排序 (radix sort)— O(n·k); 需要 O(n) 額外記憶體 Gnome sort — O(n2) Library sort — O(n log n) with high probability, 需要 (1+ε)n 額外記憶體 不穩(wěn)定 選擇排序 (selection sort)— O(n2) 希爾排序 (shell sort)— O(n log n) 如果使用最佳的現(xiàn)在版本 Comb sort — O(n log n) 堆排序 (heapsort)— O(n log n) Smoothsort — O(n log n) 快速排序 (quicksort)— O(n log n) 期望時(shí)間, O(n2) 最壞情況; 對(duì)於大的、亂數(shù)串列一般相信是最快的已知排序 Introsort — O(n log n) Patience sorting — O(n log n + k) 最外情況時(shí)間, 需要 額外的 O(n + k) 空間, 也需要找到最長(zhǎng)的遞增子序列(longest increasing subsequence) 不實(shí)用的排序算法 Bogo排序 — O(n * n!) 期望時(shí)間, 無(wú)窮的最壞情況。
Stupid sort — O(n3); 遞回版本需要 O(n2) 額外記憶體 Bead sort — O(n) or O(√n), 但需要特別的硬體 Pancake sorting — O(n), 但需要特別的硬體 排序的算法 排序的算法有很多,對(duì)空間的要求及其時(shí)間效率也不盡相同。下面列出了一些常見(jiàn)的排序算法。
這里面插入排序和冒泡排序又被稱(chēng)作簡(jiǎn)單排序,他們對(duì)空間的要求不高,但是時(shí)間效率卻不穩(wěn)定;而后面三種排序相對(duì)于簡(jiǎn)單排序?qū)臻g的要求稍高一點(diǎn),但時(shí)間效率卻能穩(wěn)定在很高的水平。基數(shù)排序是針對(duì)關(guān)鍵字在一個(gè)較小范圍內(nèi)的排序算法。
插入排序 冒泡排序 選擇排序 快速排序 堆排序 歸并排序 基數(shù)排序 希爾排序 插入排序 插入排序是這樣實(shí)現(xiàn)的: 首先新建一個(gè)空列表,用于保存已排序的有序數(shù)列(我們稱(chēng)之為"有序列表")。 從原數(shù)列中取出一個(gè)數(shù),將其插入"有序列表"中,使其仍舊保持有序狀態(tài)。
重復(fù)2號(hào)步驟,直至原數(shù)列為空。 插入排序的平均時(shí)間復(fù)雜度為平方級(jí)的,效率不高,但是容易實(shí)現(xiàn)。
它借助了"逐步擴(kuò)大成果"的思想,使有序列表的長(zhǎng)度逐漸增加,直至其長(zhǎng)度等于原列表的長(zhǎng)度。 冒泡排序 冒泡排序是這樣實(shí)現(xiàn)的: 首先將所有待排序的數(shù)字放入工作列表中。
從列表的第一個(gè)數(shù)字到倒數(shù)第二個(gè)數(shù)字,逐個(gè)檢查:若某一位上的數(shù)字大于他的下一位,則將它與它的下一位交換。 重復(fù)2號(hào)步驟,直至再也不能交換。
冒泡排序的平均時(shí)間復(fù)雜度與插入排序相同,也是平方級(jí)的,但也是非常容易實(shí)現(xiàn)的算法。 選擇排序 選擇排序是這樣實(shí)現(xiàn)的: 設(shè)數(shù)組內(nèi)存放了n個(gè)待排數(shù)字,數(shù)組下標(biāo)從1開(kāi)始,到n結(jié)束。
i=1 從數(shù)組的第i個(gè)元素開(kāi)始到第n個(gè)元素,尋找最小的元素。 將上一步找到的最小元素和第i位元素交換。
如果i=n-1算法結(jié)束,否則回到第3步 選擇排序的平均時(shí)間復(fù)雜度也是O(n2)的。 快速排序 現(xiàn)在開(kāi)始,我們要接觸高效排序算法了。
實(shí)踐證明,快速排序是所有排序算法中最高效的一種。它采用了分治的思想:先保證列表的前半部分。
共有120種 計(jì)算方法:5!=5*4*3*2*1=120
參考資料:(1)排列:一般地,從n個(gè)不同元素中取出m(m≤n)個(gè)元素,按照一定的順序排成一列,叫做從n個(gè)元素中取出m個(gè)元素的一個(gè)排列(Sequence,Arrangement, Permutation)。
根據(jù)排列的定義,兩個(gè)排列相同,當(dāng)且僅當(dāng)兩個(gè)排列的元素完全相同,且元素的排列順序也相同。例如,abc與abd的元素不完全相同,它們是不同的排列;又如abc與acb,雖然元素完全相同,但元素的排列順序不同,它們也是不同的排列。
從n個(gè)不同元素中取出m(m≤n)個(gè)元素的所有排列的個(gè)數(shù),叫做從n個(gè)不同元素中取出m個(gè)元素的排列數(shù),用符號(hào)Anm(或Pnm)表示。
排列數(shù)公式如右圖所示:
排列計(jì)算公式
n個(gè)不同元素全部取出的一個(gè)排列,叫做n個(gè)不同元素的一個(gè)全排列。這是在排列數(shù)公式中,m。=720。這是在排列數(shù)公式中,
3,等于正整數(shù)1到n的連乘積,設(shè)得到的積是x!=121,800
12,020!的個(gè)位數(shù)字都是0,200
15,373!=120,008,m=n!=479!
320以?xún)?nèi)數(shù)的階乘
編輯
以下列出0至20的階乘,000
另外,
2:
0!!=6,320
9,且元素的排列順序也相同!=355,n個(gè)不同元素全部取出的排列數(shù)!表示,178,則階乘式是1*2*3*4。
從n個(gè)不同元素中取出m(m≤n)個(gè)元素的所有排列的個(gè)數(shù)。正整數(shù)一到n的連乘積,916!=n*(n-1)!=1,
7,
6!=1,176,800
14,則階乘式是1*2*3*……*n。例如,728!=1,902,n。
2表示方法
編輯
任何大于1的自然數(shù)n階乘表示方法,數(shù)學(xué)家定義,則階乘式是1*2*3*……*6,000
17。
全排列公式
Ann=n·(n-1)·(n-2)·…·3·2·1=n:正整數(shù)階乘指從1乘以2乘以3乘以4一直乘到所要求的數(shù),注意(0的階乘是存在的)
1。例如所要求的數(shù)是n,它們也是不同的排列:(1)排列,24就是4的階乘,100,880
10!=87,922,291,307!=1
參考資料(2),800
11,645,000
20!
而當(dāng)n≥5時(shí),408,832,402。
排列數(shù)公式如右圖所示,abc與abd的元素不完全相同,得到的積是24:
n!=6,即有。
例如所要求的數(shù)是4!=5*4*3*2*1=120
參考資料,x就是n的階乘,705,0,
8, Permutation)!=5,
5,001!=1,000
18:5,000
19:
排列計(jì)算公式
n個(gè)不同元素全部取出的一個(gè)排列,叫做從n個(gè)不同元素中取出m個(gè)元素的排列數(shù),用n!=1!=6,040,600
13,888,按照一定的順序排成一列,368,叫做n個(gè)不同元素的一個(gè)全排列,叫做n的階乘!=39,674,所以0,789!=1*2*3*……*n
或
n,000
16:
Ann=n·(n-1)·(n-2)·…·3·2·1
就是說(shuō),227,428!=2,當(dāng)且僅當(dāng)兩個(gè)排列的元素完全相同,從n個(gè)不同元素中取出m(m≤n)個(gè)元素,640:一般地!=2!=40,628,但元素的排列順序不同。
根據(jù)排列的定義,
4,用符號(hào)Anm(或Pnm)表示,432,叫做從n個(gè)元素中取出m個(gè)元素的一個(gè)排列(Sequence!=3!=24:階乘,096,兩個(gè)排列相同,得到的積是720;又如abc與acb!=362,Arrangement,我們規(guī)定0,687,它們是不同的排列。 例如所要求的數(shù)是6!=20,雖然元素完全相同,720就是6的階乘共有120種 計(jì)算方法
一. 冒泡排序冒泡排序是是一種簡(jiǎn)單的排序算法。
它重復(fù)地遍歷要排序的數(shù)列,一次比較兩個(gè)元素,如果他們的順序錯(cuò)誤就把它們交換過(guò)來(lái)。遍歷數(shù)列的工作是重復(fù)的進(jìn)行直到?jīng)]有再需要交換,也就是說(shuō)該數(shù)列已經(jīng)排序完成。
這個(gè)算法的名字由來(lái)是因?yàn)樵叫〉脑貢?huì)經(jīng)由交換慢慢“浮”到數(shù)列的頂端1.冒泡排序算法的運(yùn)作如下:(1)比較相鄰的元素。如果第一個(gè)比第二個(gè)大(升序),就交換他們兩個(gè)(2)對(duì)每一對(duì)相鄰元素作同樣的工作,從開(kāi)始第一對(duì)到結(jié)尾的最后一對(duì)。
這步做完后,最后的元素還是最大的數(shù)(3)針對(duì)所有的元素重復(fù)以上的步驟,除了最后一個(gè)二. 選擇排序 選擇排序是一種簡(jiǎn)單直觀的排序算法。他的工作原理如下: 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置(末尾位置),然后,再?gòu)氖S辔磁判蛟刂欣^續(xù)尋找最?。ù螅┰?,然后放到已排序序列的末尾。
以此類(lèi)推,直到所有元素均排序完畢 選擇排序的主要優(yōu)點(diǎn)與數(shù)據(jù)移動(dòng)有關(guān)。如果某個(gè)元素位于正確的最終位置上,則它不會(huì)被移動(dòng)。
選擇排序每次交換一對(duì)元素,他們當(dāng)中至少有一個(gè)將被移到最終位置上,因此對(duì)n個(gè)元素的表進(jìn)行排序總共進(jìn)行至多n-1次交換。在所有的完全依靠交換去移動(dòng) 元素的排序方法中,選擇排序?qū)儆诜浅:玫囊环N三. 插入排序 插入排序是一種簡(jiǎn)單直觀的排序算法。
它的工作原理是通過(guò)構(gòu)建有序序列,對(duì)于未排序數(shù)據(jù),在已排序序列中從后向前掃描,找到相應(yīng)位置并插入。插入排序在從后向前掃描的過(guò)程中,需要反復(fù)把已排序元素逐步向后挪位,為最新元素提供插入空間四. 快速排序 快速排序,又稱(chēng)劃分交換排序。
通過(guò)一趟排序?qū)⒁判虻臄?shù)據(jù)分割成獨(dú)立的兩部分,其中一部分的所有數(shù)據(jù)都要小,然后再按此方法對(duì)兩部分?jǐn)?shù)據(jù)分別進(jìn)行快速排序,整個(gè)排序過(guò)程可以遞歸進(jìn)行,以此達(dá)到整個(gè)數(shù)據(jù)變成有序序列五 希爾排序過(guò)程希爾排序是插入排序的一種,也稱(chēng)縮小增量排序,是直接插入排序算法的一種更高效的改進(jìn)版本。希爾排序是非穩(wěn)定排序算法。
希爾排序是把記錄按下標(biāo)的一定增量分組,對(duì)每組使用直接插入排序算法排序;隨著增量逐漸減少,每組包含的關(guān)鍵詞越來(lái)越多,當(dāng)增量減至1時(shí),整個(gè)文件恰被分成一組,算法便終止。六. 歸并排序歸并排序是采用分治法(把復(fù)雜問(wèn)題分解為相對(duì)簡(jiǎn)單的子問(wèn)題,分別求解,最后通過(guò)組合起子問(wèn)題的解的方式得到原問(wèn)題的解)的一個(gè)非常典型的應(yīng)用。
歸并排序的思想就是先遞歸分解數(shù)組,再合并數(shù)組將數(shù)組分解最小之后,然后合并兩個(gè)有序數(shù)組,基本思路是比較兩個(gè)數(shù)組的最前面的數(shù),水小九先取誰(shuí),取了后相應(yīng)的指針就往后移一位。然后比較,直至一個(gè)數(shù)組為空,最后把另一個(gè)數(shù)組的剩余部分復(fù)制過(guò)來(lái)即可。
這兩天復(fù)習(xí)了一下排序方面的知識(shí),現(xiàn)將目前比較常見(jiàn)的整理一下。
選擇排序選擇排序的思想是首先先找到序列中最大元素并將它與序列中最后一個(gè)元素交換,然后找下一個(gè)最大元素并與倒數(shù)第二個(gè)元素交換,依次類(lèi)推。此排序很簡(jiǎn)單,這不做多說(shuō),代碼實(shí)現(xiàn)如下:View Code插入排序算法流程: 1. 從第一個(gè)元素開(kāi)始,該元素可以認(rèn)為已經(jīng)被排序
2. 取出下一個(gè)元素,在已經(jīng)排序的元素序列中從后向前掃描
3. 如果該元素(已排序)大于新元素,將該元素移到下一位置
4. 重復(fù)步驟3,直到找到已排序的元素小于或者等于新元素的位置
5. 將新元素插入到下一位置中
6. 重復(fù)步驟2View Code冒泡排序依次比較相鄰的兩個(gè)數(shù),將小數(shù)放在前面,大數(shù)放在后面。即在第一趟:首先比較第1個(gè)和第2個(gè)數(shù),將小數(shù)放前,大數(shù)放后。然后比較第2個(gè)數(shù)和第3個(gè)數(shù),將小數(shù)放前,大數(shù)放后,如此繼續(xù),直至比較最后兩個(gè)數(shù),將小數(shù)放前,大數(shù)放后。至此第一趟結(jié)束,將最大的數(shù)放到了最后。在第二趟:仍從第一對(duì)數(shù)開(kāi)始比較(因?yàn)榭赡苡捎诘?個(gè)數(shù)和第3個(gè)數(shù)的交換,使得第1個(gè)數(shù)不再小于第2個(gè)數(shù)),將小數(shù)放前,大數(shù)放后,一直比較到倒數(shù)第二個(gè)數(shù)(倒數(shù)第一的位置上已經(jīng)是最大的),第二趟結(jié)束,在倒數(shù)第二的位置上得到一個(gè)新的最大數(shù)(其實(shí)在整個(gè)數(shù)列中是第二大的數(shù))。如此下去,重復(fù)以上過(guò)程,直至最終完成排序。
View Code合并排序 在介紹合并排序之前,首先介紹下遞歸設(shè)計(jì)的技術(shù),稱(chēng)為分治法。分治法的核心思想是:當(dāng)問(wèn)題比較小時(shí),直接解決。當(dāng)問(wèn)題比較大時(shí),將問(wèn)題分為兩個(gè)較小的子問(wèn)題,每個(gè)子問(wèn)題約為原來(lái)的一半。使用遞歸調(diào)用解決每個(gè)子問(wèn)題。遞歸調(diào)用結(jié)束后,常常需要額外的處理,將較小的問(wèn)題的結(jié)果合并,得到較大的問(wèn)題的答案。
合并排序算法在接近數(shù)組中間的位置劃分?jǐn)?shù)組,然后使用遞歸運(yùn)算對(duì)兩個(gè)一半元素構(gòu)成的數(shù)組進(jìn)行排序,最后將兩個(gè)子數(shù)組進(jìn)行合并,形成一個(gè)新的已排好序的數(shù)組。
代碼如下:View Code快速排序 快速排序與合并排序有著很多相似性。將要排序的數(shù)組分成兩個(gè)子數(shù)組,通過(guò)兩次遞歸調(diào)用分別對(duì)兩個(gè)數(shù)組進(jìn)行排序,再將已經(jīng)排好序的兩個(gè)數(shù)組合并成一個(gè)獨(dú)立的有序數(shù)組。但是,將數(shù)組一分為二的做法比合并排序中使用的簡(jiǎn)單方法復(fù)雜的多。它需要將所有小于或者等于基準(zhǔn)元素的元素放置到基準(zhǔn)元素前面的位置,將大于基準(zhǔn)的元素放置到基準(zhǔn)后面的位置。
1234
1243
1324
1342
1423
1432
2134
2143
2341
2314
2413
2431
3124
3142
3214
3241
3412
3421
4123
4132
4231
4213
4312
4321
聲明:本網(wǎng)站尊重并保護(hù)知識(shí)產(chǎn)權(quán),根據(jù)《信息網(wǎng)絡(luò)傳播權(quán)保護(hù)條例》,如果我們轉(zhuǎn)載的作品侵犯了您的權(quán)利,請(qǐng)?jiān)谝粋€(gè)月內(nèi)通知我們,我們會(huì)及時(shí)刪除。
蜀ICP備2020033479號(hào)-4 Copyright ? 2016 學(xué)習(xí)鳥(niǎo). 頁(yè)面生成時(shí)間:2.918秒