2022年軟件設(shè)計師考試知識點(六十四):排序與查找

軟件設(shè)計師 責(zé)任編輯:胡媛 2022-01-07

添加老師微信

備考咨詢

加我微信

摘要:為幫助考生備考2022年軟考中級軟件設(shè)計師考試,希賽小編為大家整理了2022年軟件設(shè)計師考試知識點(六十四):排序與查找,希望對大家備考會有幫助。

很多考生在備考2022年軟件設(shè)計師考試,希賽小編為大家整理了2022年軟件設(shè)計師考試知識點(六十四):排序與查找,供考生備考復(fù)習(xí)。

排序與查找(★★★★★)

【考法分析】

1、本知識點的主要考查形式有:給定情景描述,指出適用的排序方法;指出特定排序方法的時間復(fù)雜度、空間復(fù)雜度;指出二分查找的比較次數(shù)、比較對象、

時間復(fù)雜度;指出散列表查找的相關(guān)概念描述是否正確。

【要點分析】

1、順序查找的思想:將待查找的關(guān)鍵字為key的元素從頭到尾與表中元素進(jìn)行比較,如果中間存在關(guān)鍵字為key的元素,則返回成功;否則,則查找失敗。

2、二分法查找的基本思想是:(設(shè)R[low,…,high]是當(dāng)前的查找區(qū))

(1)確定該區(qū)間的中點位置:mid=L(low+high)/2?;

(2)將待查的k值與R[mid].key比較,若相等,則查找成功并返回此位置,否則需確定新的查找區(qū)間,繼續(xù)二分查找,具體方法如下。

若R[mid].key>k,則由表的有序性可知R[mid,…,n].key均大于k,因此若表中存在關(guān)鍵字等于k的結(jié)點,則該結(jié)點必定是在位置mid左邊的子表R[low,…,mid–1]中。因此,新的查找區(qū)間是左子表R[low,…,high],其中high=mid–1。

若R[mid].key<k,則要查找的k必在mid的右子表R[mid+1,…,high]中,即新的查找區(qū)間是右子表R[low,…,high],其中l(wèi)ow=mid+1。

若R[mid].key=k,則查找成功,算法結(jié)束。

(3)下一次查找是針對新的查找區(qū)間進(jìn)行,重復(fù)步驟(1)和(2)。

(4)在查找過程中,low逐步增加,而high逐步減少。如果high<low,則查找失敗,算法結(jié)束。

折半查找在查找成功時關(guān)鍵字的比較次數(shù)最多為 L  log2n +1  ?   次。

折半查找的時間復(fù)雜度為 O(log2n)次。

【例題】請給出在含有12個元素的有序表{1,4,10,16,17,18,23,29,33,40,50,51}中二分查找關(guān)鍵字17的過程。

image.png

比較次數(shù):4次;比較對象a[6],a[3],a[4],a[5]。

3、散列表查找的基本思想是:已知關(guān)鍵字集合U,最大關(guān)鍵字為m,設(shè)計一個函數(shù)Hash,它以關(guān)鍵字為自變量,關(guān)鍵字的存儲地址為因變量,將關(guān)鍵字映射到一個有限的、地址連續(xù)的區(qū)間T[0..n-1](n<<m)中,這個區(qū)間就稱為散列表,散列查找中使用的轉(zhuǎn)換函數(shù)稱為散列函數(shù)。

開放定址法是指當(dāng)構(gòu)造散列表發(fā)生沖突時,使用某種探測手段,產(chǎn)生一個探測的散列地址序列,并且逐個查找此地址中是否存儲了數(shù)據(jù)元素,如果沒有,則稱該散列地址開放,并將關(guān)鍵字存入,否則沖突,繼續(xù)查找下一個地址。

例:記錄關(guān)鍵碼為(3,8,12,17,9),取m=10(存儲空間為10),p=5,散列函數(shù)h=key%p。

image.png

4、排序分類

image.png

5、直接插入排序:即當(dāng)插入第i個記錄時,R1,R2,…,Ri-1均已排好序,因此,將第i個記錄Ri依次與Ri-1,…,R2,R1進(jìn)行比較,找到合適的位置插入。它簡單明了,但速度很慢。

注:對于基本有序的序列,選擇直接插入排序方法,時間復(fù)雜度近乎線性為:O(n)。

image.png

6、希爾(Shell)排序:先取一個小于n的整數(shù)d1作為第一個增量,把文件的全部記錄分成d1個組。所有距離為dl的倍數(shù)的記錄放在同一個組中。先在各組內(nèi)進(jìn)行直接插入排序;然后,取第二個增量d2<d1重復(fù)上述的分組和排序,直至所取的增量dt=1(dt<dt–l<O<d2<d1),即所有記錄放在同一組中進(jìn)行直接插入排序為止。該方法實質(zhì)上是一種分組插入方法。

image.png

7、直接選擇排序的過程是,首先在所有記錄中選出排序碼最小的記錄,把它與第1個記錄交換,然后在其余的記錄內(nèi)選出排序碼最小的記錄,與第2個記錄交換……依次類推,直到所有記錄排完為止。

image.png

8、堆排序

(1)堆的定義:設(shè)有n個元素的序列{K1,K2,…,Kn},當(dāng)且僅當(dāng)滿足下述關(guān)系之一時,稱之為堆。

(i) Ki≤K2 i 且Ki≤K2 i +1;

(ii) Ki≥K2 i 且Ki≥K2 i +1 。

其中(i)稱為小頂堆,(ii)稱為大頂堆。

(2)堆排序的基本思想為:先將序列建立堆,然后輸出堆頂元素,再將剩下的序列建立堆,然后再輸出堆頂元素,依此類推,直到所有元素均輸出為止,此時元素輸出的序列就是一個有序序列。

(3)堆排序的算法步驟如下(以大頂堆為例):

(i)初始時將順序表R[1..n]中元素建立為一個大頂堆,堆頂位于R[1],待序區(qū)為R[1..n]。

(ii)循環(huán)執(zhí)行步驟3~步驟4,共n-1次。

(iii)假設(shè)為第i 運(yùn)行,則待序區(qū)為R[1..n-i+1],將堆頂元素R[1]與待序區(qū)尾元素R[n-i+1]交換,此時頂點元素被輸出,新的待序區(qū)為R[1..n-i ]。

(iv)待序區(qū)對應(yīng)的堆已經(jīng)被破壞,將之重新調(diào)整為大頂堆。

(4)堆排序時間復(fù)雜度為:O(nlog2n),是不穩(wěn)定的排序。

9、冒泡排序的基本思想是,通過相鄰元素之間的比較和交換,將排序碼較小的元素逐漸從底部移向頂部。由于整個排序的過程就像水底下的氣泡一樣逐漸向上冒,因此稱為冒泡算法。

image.png

10、快速排序采用的是分治法,其基本思想是將原問題分解成若干個規(guī)模更小但結(jié)構(gòu)與原問題相似的子問題。通過遞歸地解決這些子問題,然后再將這些子問題的解組合成原問題的解。

快速排序通常包括兩個步驟:

第一步,在待排序的n個記錄中任取一個記錄,以該記錄的排序碼為準(zhǔn),將所有記錄都分成兩組,第1組都小于該數(shù),第2組都大于該數(shù),如圖所示。

第二步,采用相同的方法對左、右兩組分別進(jìn)行排序,直到所有記錄都排到相應(yīng)的位置為止。

image.png

11、歸并也稱為合并,是將兩個或兩個以上的有序子表合并成一個新的有序表。若將兩個有序表合并成一個有序表,則稱為二路合并。合并的過程是:比較A[i]和A[j]的排序碼大小,若A[i]的排序碼小于等于A[j]的排序碼,則將第一個有序表中的元素A[i]復(fù)制到R[k]中,并令i和k分別加1;如此循環(huán)下去,直到其中一個有序表比較和復(fù)制完,然后再將另一個有序表的剩余元素復(fù)制到R中。

image.png

12、基數(shù)排序是一種借助多關(guān)鍵字排序思想對單邏輯關(guān)鍵字進(jìn)行排序的方法。基數(shù)排序不是基于關(guān)鍵字比較的排序方法,它適合于元素很多而關(guān)鍵字較少的序列?;鶖?shù)的選擇和關(guān)鍵字的分解是根據(jù)關(guān)鍵字的類型來決定的,例如關(guān)鍵字是十進(jìn)制數(shù),則按個位、十位來分解。

image.png

【備考點撥】

1、掌握順序查找的相關(guān)概念;

2、掌握二分查找的過程;

3、掌握散列表的位置分布和沖突相關(guān)的概念;

4、掌握常見排序方法的分類、時間復(fù)雜度、空間復(fù)雜度、穩(wěn)定性等;

5、掌握常見排序方法的排序過程(堆排序了解其排序過程)。

更多資料
更多課程
更多真題
溫馨提示:因考試政策、內(nèi)容不斷變化與調(diào)整,本網(wǎng)站提供的以上信息僅供參考,如有異議,請考生以權(quán)威部門公布的內(nèi)容為準(zhǔn)!

軟考備考資料免費領(lǐng)取

去領(lǐng)取

!
咨詢在線老師!