排序演算法學習(5)

2021-08-04 03:35:20 字數 1335 閱讀 2525

1.

將2個各有n個元素的有序表歸併成乙個有序表,其最少的比較次數是:n

分析:歸併排序最少比較n,最多比較2n-1.

當第乙個有序表中所有的元素都小於(或大於)第二個表中的元素,只需要用第二個表中的第乙個元素依次與第乙個表的元素比較,總計比較n次。

分析二:

a(a0,a1,...an)、b(b0,b1,...bn)為長度為n的有序表。

假設a中元素都比b中要小,則先比較n次將a中元素取完,然後再依次取b中元素。所以,最小比較次數為n。

2. 在下列排序方法中,(d)方法可能出現這種情況,在最後一趟開始之前,所有元素都不在其最終應在的正確位置上。 a

快排   b 冒泡     c 堆排序   d 插入

分析:插入排序中, 如果最後乙個數最小, 前面所有的數字都要移動位置。

3. 用鄰接表表示圖時,拓撲排序演算法時間複雜度為o(n+e)

分析:嚴蔚敏的書上演算法、分析。

求各頂點入度的時間複雜度是o(e),即邊的個數。

建零入度頂點棧的時間複雜度是o(n),即頂點的個數。

每個頂點都需要進一次棧,出一次棧,然後把入度減一。執行的總次數也是邊的個數。所以時間複雜度是o(n+e)。

分析二:

增設乙個儲存入度的陣列,乙個用以組織入度為0的節點的棧s,則每個節點都需要入棧一次,一共n次,每個節點入度減1的操作一共e次,因此為o(n+e)。

4. 以下哪種排序演算法需要開闢額外的儲存空間?

a 選擇排序

b 歸併排序

c 快排     d堆排序

概念: 將已有序的子串行合併,得到完全有序的序列;即先使每個子串行有序,再使子串行段間有序。若將兩個有序表合併成乙個有序表,稱為二路歸併。

特點: 歸併排序的最好、最壞和平均時間複雜度都是 o(nlogn) ,而空間複雜度是 o(n), 比較次數介於(nlogn)/2和(nlogn)-n+1,賦值操作的次數是(2nlogn)。

點評: 歸併排序演算法比較占用記憶體,但卻是效率高且穩定的排序演算法。

分析:需要額外空間的排序演算法:

*桶排序 (bucketsort)— o(n);需要o(k)額外空間 *

計數排序 (countingsort) — o(n+k);需要o(n+k)額外空間

*合併排序 (mergesort)— o(n log n);需要o(n)額外空間

*二叉排序樹排序 (binarytree sort)— o(n log n)期望時間

;o(n²)

最壞時間;需要o(n)額外空間

*基數排序 (radixsort)— o(n·k);需要o(n)額外空間 5.

為實現快排演算法,待排序序列宜採用的儲存方式是:順序儲存。

演算法學習 5

快速排序也是一種採用分治策略的演算法,它與歸併排序不同的是,它是原址排序,不需要額外的空間。如果把要排序的陣列簡單從任何位置切成兩個子陣列,對子陣列排序後,又因為是原址排序,排序後的兩個子陣列分別都是有序的,但是作為乙個整體很顯然未必就是是有序的呢 所以分解肯定就不能是簡單的把陣列切斷成兩個子陣列。...

演算法學習5

乙個最大堆 package com.example.demo.algorithm author aloli date 2020 9 10 13 35 乙個最大堆 public class maxheap public maxheap int size if size maxsize this siz...

排序演算法學習

一直都想把排序和搜尋類的演算法總結一下,一直拖著沒寫,主要是太懶了,現在決定還是要再好好學習下這些基本的演算法。畢竟基礎真的是很重要。好了現在開始學習第乙個排序演算法 插入排序 我記得插入排序在我們以前的資料結構教程上是第乙個介紹的 插入排序 聽這個排序名字就是將乙個什麼數要插入到某個地方,不錯,他...