一道資料結構題,請問怎樣分析各種排序的空間複雜度?求較為詳細的解釋,謝謝

2021-04-14 09:07:20 字數 4786 閱讀 6984

1樓:匿名使用者

題目呢?

排序演算法的時間空間複雜度都是有定論的,基本上不用特別分析了,只要知道是哪個演算法就有結論了,

基於比較的排序演算法時間複雜度最快都是o(nlogn)

一道資料結構題,為什麼希爾排序的空間複雜度為o(1),這個是怎麼理解的?求指點,另外快速排序的 150

2樓:匿名使用者

希爾排序是插入

bai排序的改良版,du插入排序zhi空間複雜度就是o1,因為每dao次就是拿起一個數比較。

內快速排序空間複雜度容說的是 維持這個哨兵元素的空間。

因為快排是通過哨兵來劃分左右陣列,直到劃分成有序為止。假設一個平均情況,第一次劃分出一半一半,第二次在一半中劃分出一半的一半也就是兩個四分之一, 以此類推,那麼需要logn次能把最左邊的劃分做完,也就是logn個哨兵。 當你做完左邊也就可以空出位置做右邊,這時候也是logn , 空間是沒增加的。

資料結構中各種排序的時間複雜度與空間複雜度比較!

3樓:匿名使用者

氣泡排序

是穩定的,演算法時間複雜度是o(n ^2)。 2.2 選擇排序(selection sort) 選擇排序的基本思想是對待排序的記錄序列進行n-1遍的處理,第i遍處理是將l[i..

n]中最小者與l[i]交換位置。這樣,經過i遍處理之後,前i個記錄的位置已經是正確的了。 選擇排序是不穩定的,演算法複雜度是o(n ^2 )。

2.3 插入排序 (insertion sort) 插入排序的基本思想是,經過i-1遍處理後,l[1..i-1]己排好序。

第i遍處理僅將l[i]插入l[1..i-1]的適當位置,使得l[1..i] 又是排好序的序列。

要達到這個目的,我們可以用順序比較的方法。首先比較l[i]和l[i-1],如果l[i-1]≤ l[i],則l[1..i]已排好序,第i遍處理就結束了;否則交換l[i]與l[i-1]的位置,繼續比較l[i-1]和l[i-2],直到找到某一個位置j(1≤j≤i-1),使得l[j] ≤l[j+1]時為止。

圖1演示了對4個元素進行插入排序的過程,共需要(a),(b),(c)三次插入。 直接插入排序是穩定的,演算法時間複雜度是o(n ^2) 。 2.

4 堆排序 堆排序是一種樹形選擇排序,在排序過程中,將a[n]看成是完全二叉樹的順序儲存結構,利用完全二叉樹中雙親結點和孩子結點之間的內在關係來選擇最小的元素。 堆排序是不穩定的,演算法時間複雜度o(nlog n)。 2.

5 歸併排序 設有兩個有序(升序)序列儲存在同一陣列中相鄰的位置上,不妨設為a[l..m],a[m+1..h],將它們歸併為一個有序數列,並儲存在a[l..

h]。 其時間複雜度無論是在最好情況下還是在最壞情況下均是o(nlog2n)。 2.

6 快速排序 快速排序是對氣泡排序的一種本質改進。它的基本思想是通過一趟掃描後,使得排序序列的長度能大幅度地減少。在氣泡排序中,一次掃描只能確保最大數值的數移到正確位置,而待排序序列的長度可能只減少1。

快速排序通過一趟掃描,就能確保某個數(以它為基準點吧)的左邊各數都比它小,右邊各數都比它大。然後又用同樣的方法處理它左右兩邊的數,直到基準點的左右只有一個元素為止。 快速排序是不穩定的,最理想情況演算法時間複雜度o(nlog2n),最壞o(n ^2)。

2.7 希爾排序 在直接插入排序演算法中,每次插入一個數,使有序序列只增加1個節點,並且對插入下一個數沒有提供任何幫助。如果比較相隔較遠距離(稱為 增量)的數,使得數移動時能跨過多個元素,則進行一次比較就可能消除多個元素交換。

d.l.shell於2023年在以他名字命名的排序演算法中實現了這一思想。

演算法先將要排序的一組數按某個增量d分成若干組,每組中記錄的下標相差d.對每組中全部元素進行排序,然後再用一個較小的增量對它進行,在每組中再進行排序。當增量減到1時,整個要排序的數被分成一組,排序完成。

希爾排序是不穩定的,其時間複雜度為o(n ^2)。 排序類別 時間複雜度 空間複雜度 穩定 1 插入排序 o(n2) 1 √ 2 希爾排序 o(n2) 1 × 3 氣泡排序 o(n2) 1 √ 4 選擇排序 o(n2) 1 × 5 快速排序 o(nlogn) o(logn) × 6 堆排序 o(nlogn) 1 × 7 歸併排序 o(nlogn) o(n) √

0 順序查詢, o(n) 二分, o(logn)需要排序分塊 分塊查詢? 不知道..英文是什麼?

直接插入 o(n^2) 快速排序 最壞情況o(n^2) 平均o(nlogn) 起泡 和插入很像吧 o(n^2) 希爾,o(n^x) 1或< )的排序演算法理論最低複雜度是o(nlogn) 證明: 所有可能情況為n! 構造決策樹需要n!

子節點 《為二分操作,所以樹為二叉樹,高度為o(logn!)=o(nlogn)

資料結構中演算法的時間和空間複雜度怎麼計算

4樓:匿名使用者

你好.t(n)=o( f (n) )  表示時間問題規模n的增大,演算法執行時間的增長率和f(n)的增長率相同.稱作 時間複雜度.如下:1. 2.

 for (i=1;i<=n;++i) 3. for ( j=1; j<=n;++j ) for (k+1;j<=n;++k) 基本操作「x增1」的語句的頻度分別為1.n和n的平方.則這三個程式段的時間複雜度分別 為.o(1).

o(n)..o(n平方).分別為常量階.線性階.和平方階...演算法可能呈現 的時間 複雜度還有對數階o(long n) .指數階o(2 n方)等 .空間複雜度:  s(n)=o(f(n))其中n為問題的規模(或大小).一個上機執行的程式 除了需要儲存空間來寄存本身所用指令.常數.變數和輸入資料外.也要一些對資料進行操作 的工作單元和儲存一些為實現計算所需資訊的空間.若輸入資料所佔的空間只取決於問題本身,和演算法無關,則只要分析除輸入和程式之處的額處空間,否則應同時考慮輸入本身所需空間...

有點抽象...因為本人也學不好.所以.只能回答這些..見諒..

5樓:匿名使用者

排序演算法 所謂排序,就是使一串記錄,按照其中的某個或某些關鍵字的大小,遞增或遞減的排列起來的操作。 分類 在電腦科學所使用的排序演算法通常被分類為: 計算的複雜度(最差、平均、和最好表現),依據串列(list)的大小(n)。

一般而言,好的表現是o。(n log n),且壞的行為是ω(n2)。對於一個排序理想的表現是o(n)。

僅使用一個抽象關鍵比較運算的排序演算法總平均上總是至少需要ω(n log n)。 記憶體使用量(以及其他電腦資源的使用) 穩定度:穩定排序演算法會依照相等的關鍵(換言之就是值)維持紀錄的相對次序。

也就是一個排序演算法是穩定的,就是當有兩個有相等關鍵的紀錄r和s,且在原本的串列中r出現在s之前,在排序過的串列中r也將會是在s之前。 一般的方法:插入、交換、選擇、合併等等。

交換排序包含氣泡排序(bubble sort)和快速排序(quicksort)。選擇排序包含shaker排序和堆排序(heapsort)。 當相等的元素是無法分辨的,比如像是整數,穩定度並不是一個問題。

然而,假設以下的數對將要以他們的第一個數字來排序。 (4, 1) (3, 1) (3, 7) (5, 6) 在這個狀況下,有可能產生兩種不同的結果,一個是依照相等的鍵值維持相對的次序,而另外一個則沒有: (3, 1) (3, 7) (4, 1) (5, 6) (維持次序) (3, 7) (3, 1) (4, 1) (5, 6) (次序被改變) 不穩定排序演算法可能會在相等的鍵值中改變紀錄的相對次序,但是穩定排序演算法從來不會如此。

不穩定排序演算法可以被特別地時作為穩定。作這件事情的一個方式是人工擴充鍵值的比較,如此在其他方面相同鍵值的兩個物件間之比較,就會被決定使用在原先資料次序中的條目,當作一個同分決賽。然而,要記住這種次序通常牽涉到額外的空間負擔。

排列演算法列表 在這個**中,n是要被排序的紀錄數量以及k是不同鍵值的數量。 穩定的 氣泡排序(bubble sort) — o(n2) 雞尾酒排序 (cocktail sort, 雙向的氣泡排序) — o(n2) 插入排序 (insertion sort)— o(n2) 桶排序 (bucket sort)— o(n); 需要 o(k) 額外 記憶體 計數排序 (counting sort) — o(n+k); 需要 o(n+k) 額外 記憶體 歸併排序 (merge sort)— o(n log n); 需要 o(n) 額外記憶體 原地歸併排序 — o(n2) 二叉樹排序 (binary tree sort) — o(n log n); 需要 o(n) 額外記憶體 鴿巢排序 (pigeonhole sort) — o(n+k); 需要 o(k) 額外記憶體 基數排序 (radix sort)— o(n·k); 需要 o(n) 額外記憶體 gnome sort — o(n2) library sort — o(n log n) with high probability, 需要 (1+ε)n 額外記憶體 不穩定 選擇排序 (selection sort)— o(n2) 希爾排序 (shell sort)— o(n log n) 如果使用最佳的現在版本 comb sort — o(n log n) 堆排序 (heapsort)— o(n log n) **oothsort — o(n log n) 快速排序 (quicksort)— o(n log n) 期望時間, o(n2) 最壞情況; 對於大的、亂數串列一般相信是最快的已知排序 introsort — o(n log n) patience sorting — o(n log n + k) 最外情況時間, 需要 額外的 o(n + k) 空間, 也需要找到最長的遞增子序列(longest increasing subsequence) 不實用的排序演算法 bogo排序 — o(n × n!) 期望時間, 無窮的最壞情況。

stupid sort — o(n3); 遞迴版本需要 o(n2) 額外記憶體 bead sort — o(n) or o(√n), 但需要特別的硬體 pancake sorting — o(n), 但需要特別的硬體 排序的演算法 排序的演算法有

行測分析的一道題行測資料分析的一道題

還分析什麼啊,這類題考的不是分析,是簡算。09年 限額以上 除以 1.274 09年 限額以下 除以 1.128 09年做差求差值 10年 直接算限額以上與限額以下差值 都按照大減小算,然後再把兩個差值做差 ps 限額以上 限額以下圓圖上都標著數量呢,看不清,你自己代入這題關鍵在於1.判斷排除。判斷...

下面是資料結構c語言版的一道練習題,要求要用棧哪位大神會內容 已知線性表(1 2,

include include 定義連結串列節點結構 struct node node int val val val next null node int val,node next val val next next node public int val node next typedef n...

一道電路分析題,求詳細答案,一道電路分析題,求詳細答案

我統統用的是戴維寧的升級版 一步法。把rl處換成一個電流表,一個電壓表。最後得出u req i ueq的形式。abcd都已標號,字醜,無怪。求分求最佳 ps 現在最缺的是採納數,所以以後碰到這種題目換成4個問題,即使分沒有我也會答的。大哥。這麼好的回答你居然不採納?電路分析題一道,詳細看圖 從已知條...