查找
-
(NOIP2014)同時查找 2n 個數中的最大值和最小值,最少比較次數為( C).
A. 3(n-2)/2 B. 4n-2 C. 3n-2 D. 2n-2
前兩個數比較,大的為最大值, 小的為最小值, 用掉一次比較
后面2(n-1)個數, 每兩個比較, 大的同最大值比較, 小的同最小值比較, 3(n-1)次比較,
共3*(n - 1) + 1 = 3n - 2次比較 -
當采用分塊查找時,數據的組織方式為 (B)
A.數據分成若干塊,每塊內數據有序
B.數據分成若干塊,每塊內數據不必有序,但塊間必須有序,每塊內最大(或最小)的數據組成索引塊
C. 數據分成若干塊,每塊內數據有序,每塊內最大(或最小)的數據組成索引塊
D. 數據分成若干塊,每塊(除最后一塊外)中數據個數需相同 -
二叉樹為二叉排序樹的充分必要條件是其任一結點的值均大於其左孩子的值、小於其右孩子的值。這種說法( B )。
A.正確 B. 錯誤
整個子樹都要滿足。 -
如果要求一個線性表既能較快的查找,又能適應動態變化的要求,則可采用( A )查找法。
A. 分塊查找 B. 順序查找 C. 折半查找 D. 基於屬性 -
散列表的平均查找長度( A )。
A. 與處理沖突方法有關而與表的長度無關
B. 與處理沖突方法無關而與表的長度有關
C. 與處理沖突方法有關且與表的長度有關
D. 與處理沖突方法無關且與表的長度無關 -
從具有n個結點的二叉排序樹中查找一個元素時,在平均情況下的時間復雜度大致為(C)。
A. \(O(n)\) B. \(O(1)\) C. \(O(\log n)\) D. \(O(n^2)\) -
設哈希表長為14,哈希函數是H(key)=key%11,表中已有數據的關鍵字為15,38,61,84共四個,
現要將關鍵字為49的結點加到表中,用二次探測再散列法解決沖突,則放入的位置是(D)
A.8 B.3 C.5 D.9 -
( B )構造的哈希函數肯定不會發生沖突。
.數字分析法 B.直接定址法 C.除留余數法 D.平方取中法
https://blog.csdn.net/liu17234050/article/details/104270709/
排序
9、下列關於排序說法不正確的是(D )。
A、 插入排序、冒泡排序是穩定的
B、 選擇排序的時間復雜度為O(n^2)
C、 選擇排序、希爾排序、快速排序、堆排序是不穩定的
D、 希爾排序、快速排序、堆排序的時間復雜度為O(nlogn)
解析:
是否穩定看排序后原來相等兩數是否會交換位置,
因此,如果不是相鄰兩數比較交換的往往是不穩定。
shell是O(n^1.3),一般達不到O(nlogn)
-
下列各項關於內部排序與外部排序的說法正確的是(ABC)。
A.與內部排序相比,外部排序待排序數據量大
B.內部排序過程是在計算機內存中進行的
C.外部排序的效率衡量標准是讀寫外存次數
D.外部排序全過程均不在內存內部排序:待排序記錄存放在計算機隨機存儲器中(說簡單點,就是內存)進行的排序過程。
外部排序:待排序記錄的數量很大,以致於內存不能一次容納全部記錄,所以在排序過程中需要對外存進行訪問的排序過程。
從概念我們可以清晰的看到二者的區別衡量效率的方法
內部排序:比較次數,也就是時間復雜度
外部排序:IO次數,也就是讀寫外存的次數排序方法
內部排序:插入排序、快速排序、選擇排序、歸並排序、基數排序等
外部排序:
先來了解下外部排序的過程吧。
外部排序基本上由兩個相對獨立的階段組成。首先,按可用內存大小,將外存上含n個記錄的文件分成若干長度為l的子文件或段,依次讀入內存並利用有效的內部排序方法對他們進行排序,並將排序后得到的有序子文件重新寫入外存,通常稱這些有序子文件為歸並段;然后,對這些歸並段進行逐趟歸並,使歸並段逐漸由小至大,直至得到整個有序文件為止。 -
對n個記錄的線性表進行快速排序,為減少算法的遞歸深度,以下途述正確的是(A)。
A.每次分區后,先處理較短的部分
B.每次分區后,先處理較長的部分
C.與算法每次分區后的處埋順序無關
D.以上都不對 -
應用快速排序的分治思想,可以實現一個求第K大數的程序。
假定不考慮極端的最壞情況,理論上可以實現的最低的算法時間復雜度為( C )。
A.O (n2) B.O (n log n ) C.O (n) D. O (1) -
已知數據表A中每個元素距其最終的位置不遠,則采用( B )排序算法最省時間。
A.堆排序
B.插入排序
C.直接選擇排序
D.快速排序 -
設關鍵字序列為(3,7,6,9,7,1,4,5,20),對其進行排序的最小交換次數是
( A )。
A.5 B.6 C.7 D.20
冒泡
- 若某算法的計算時間表示為遞推關系式:
T(N) = 2T(N / 2) + N log N
T(1) = 1
則該算法的時間復雜度為( C )。
A. O(N) B. O(N log N) C. O(N log^2 N) D. O(N^2)
帶進去算。
-
關鍵字序列(8,9,10,4,5,6,20,1,2)只能是下列排序算法中( C )的兩趟排序后的結果。
A.選擇排序 B.冒泡排序 C.插入排序 D.堆排序 -
在對一組關鍵字序列{70,55,100,15,33,65,50,40,95},進行直接插入排序時,把65插入,需要比較( A )次。
A. 2 B. 4 C. 6 D. 8
是反着掃的。 -
在待排序序列局部有序時,效率最高的排序算法是(B)。
A. 直接選擇排序 B. 直接插入排序 C. 快速排序 D.歸並排序
是反着掃的。 -
以下排序中,平均比較次數最少的是(B)。
A.插入排序 B. 快速排序 C. 堆排序 D. 冒泡排序 -
若待排序對象序列在排序前已按其排序碼遞增順序排列,則采用(A)方法比較次數最少。
A. 直接插入排序 B. 快速排序
C. 歸並排序 D. 直接選擇排序
是反着掃的。 -
應用快速排序的分治思想,可以實現一個求第K大數的程序。假定不考慮極端的最壞情況,理論上可以實現的最低的算法時間復雜度為(C)。
A.O (n^2) B.O (n log n ) C.O (n) D. O (1) -
下列算法時間復雜度是O(nlogn)的是( BC )
A.基數排序
B.快速排序
C.歸並排序
D.希爾排序 -
下列排序中,排序速度與數據的初始排列是否有序沒有關系的有( ABC )。
A.直接選擇排序 B.基數排序 C.堆排序 D.直接插入排序 -
下列排序算法中( ABCD )算法是不穩定的。
A. 直接選擇排序 B. 堆排序
C. Shell排序 D. 快速排序 -
采用任何基於排序碼比較的算法,對5個互異的整數進行排序,至少需要( C )次比較。
A. 5 B. 6 C. 7 D. 8
\(\log(5!)\) 向上取整,為7. -
下列關於排序的算法,正確的是(ACD)。
A.不存在這樣一個基於排序碼比較的算法:它只通過不超過9次排序碼的比較,就可以對任何6個排序碼互異的數據對象實現排序。
B.如果輸入序列已經排好序,則快速排序算法無需移動任何數據對象就可以完成排序。
C.希爾排序的最后一趟就是冒泡排序。 -
堆排序:先層次,然后一個個挪,大根堆找大兒子交換,小根堆找小兒子交換
-
如果只想得到1024個元素組成的序列中的前5個最小元素,那么用(D)方法最快。
A. 冒泡排序 B. 快速排序
C. 直接選擇排序 D. 堆排序\(n\log k<nk\)
-
在含有n個元素的小根堆(堆頂元素最小)中,關鍵字最大的記錄可能存儲在(D)位置上。([]表示向下取整)
A.[n/2] B.[n/2]-1
C.1 D.[n/2]+3
可以輕松舉例出。
最大的必然在最后一層。
設最后一層如果弄滿是 \(x\) 個,
那么之前的有 \(x - 1\) 個。
\(x-1+y=n\)
\(x+y=n+1\)
\(2*y\le n+1\)
\(y \le (n + 1)/2\)
\(y - 1\le (n - 1) / 2\)
\(pos\in [n - y + 1, n]\)
\(pos\in[n - (n - 1)/2, n]\)
\(pos\in[(n+1) / 2, n]\)
\(pos\in [[n / 2] + 1, n]\)
證畢。 -
下列算法中( D )算法不具有這樣的特性:對某些輸入序列,可能不需要移動數據對象即可完成排序。
A. 冒泡排序 B. 希爾排序
C. 快速排序 D. 直接選擇排序
?
