0514資料結構 遞迴 排序和查詢

2022-06-08 21:15:27 字數 2382 閱讀 5213

1.漢諾塔演算法

實現這個演算法可以簡單分為三個步驟:

(1) 把n-1個盤子由a 移到 b;

(2) 把第n個盤子由 a移到 c;

(3) 把n-1個盤子由b 移到 c;

從這裡入手,在加上上面數學問題解法的分析,我們不難發現,移到的步數必定為奇數步:

(1)中間的一步是把最大的乙個盤子由a移到c上去;

(2)中間一步之上可以看成把a上n-1個盤子通過借助輔助塔(c塔)移到了b上,

(3)中間一步之下可以看成把b上n-1個盤子通過借助輔助塔(a塔)移到了c上;

時間複雜度:n個盤子,需要移動2^n-1次,所以時間複雜度為o(2^n)

遞迴呼叫時系統所做的工作:

乙個函式在呼叫另乙個函式之前,執行被調函式是,需要進行(1)將所有實參、返回位址等資訊傳遞給被呼叫函式儲存(2)為被呼叫函式分配區域性變數儲存區(3)將控制轉移到被呼叫函式的入口

2.快排序演算法

演算法思想:採用分治思想,在記錄中確定乙個基準資料,然後將記錄中的資料和基準元素對比,將記錄分為比基準元素大和基準元素小的兩部分。然後進行遞迴的方法,分別對分成的兩部分進行重複的劃分操作,直到資料有序為止。每一次劃分的過程可以是確定第乙個元素為基準元素,然後使用兩個指標,分別從記錄的末尾和開頭進行和基準元素的比較,比他大就放在右邊,比他小的放在左邊,最後將基準元素放在這兩組資料的中間。因為所有的元素都需要和基準元素進行比較,所以每一次劃分需要比較n次,而且每次分成兩部分,需要logn次的劃分,所以快速排序的時間複雜度為o(nlogn),空間複雜度是o(logn)。但是如果這一組記錄是逆序的,每次採取第乙個數字為基準數字的話,快排演算法就會退化成為氣泡排序演算法,時間複雜度就會變成o(n^2)。最後,快速排序是一種不穩定的演算法。

3.歸併排序

演算法思想:歸併排序採用分治的思想,將資料分為若干個組,每個組排序之後再進行合併。時間複雜度是o(nlogn),空間複雜度根據分組進行合併時所使用的額外空間確定,最大是o(n)。

4.堆排序演算法

首先,堆是一種特殊的完全二叉樹,可以使用陣列儲存。堆分為大頂堆和小頂堆,大頂堆即樹中的每乙個父結點都比他的兩個子結點的值要大,小頂堆相反。以大頂堆為例,堆的基本操作從上向下調整和從下向上調整,從上向下調整就是將結點和他的子結點進行比較和交換,把小的值往下調整。從下向上調整將乙個結點的值和他的子結點進行比較和交換,把大的值向上調整。

堆排序的基本思想是:將待排序序列使用向上調整的操作不斷進行調整構造成乙個大頂堆,此時,整個序列的最大值就是堆頂的根節點。將其與末尾元素進行交換,此時末尾就為最大值。然後將剩餘n-1個元素使用向下調整的操作重新構造成乙個堆,這樣會得到n個元素的次小值。如此反覆執行,便能得到乙個有序序列了。

構造堆的時間複雜度是o(n),調整的時間複雜度是o(logn),堆排序的時間複雜度是o(nlogn),空間複雜度是o(1)。

堆排序和快排的比較:

(1)對於快速排序,資料是連續訪問的,而對於快排序來說資料是跳著訪問的,因此堆排序對於cpu的快取是不友好的。

(2)同樣的資料,堆排序的資料交換次序要多於快速排序。

堆排序的應用:

找top k元素

優先順序佇列(如下)

5.給定一組資料,資料元素的權值依次為(4,11,7,8,1,0,5,3,9)

(1)設計權值最小優先的優先順序佇列的構造演算法.構造小頂堆。

(2)設計該優先順序佇列的而輸出演算法,並說明輸出了之後的陣列中剩餘各元素的位置。

6.線性排序(排序演算法的時間複雜度是線性的,都為o(n))

桶排序:將要排序的資料分到幾個有序的桶裡面,每個桶內的資料再進行排序,這樣按序將每個桶裡面的資料依次取出,桶裡面的資料就是有序的了。假設要排序的資料有n個,有m個桶,每個桶內就是n/m個資料,每個桶內使用快排演算法排序,那麼每個桶排序的時間複雜度就是n/m*lon(n/m),m個桶就是n*log(n/m),當桶的個數非常接近資料個數時,lon(n/m)就是乙個很小的資料了,此時桶排序的時間複雜度就約等於o(n)。當然,雖然時間複雜度為o(n),但是桶排序對於排序資料的要求是非常苛刻的,首先,要排序的資料需要很容易就劃分成n個桶,其次,資料在每個桶內是均勻的。桶排序適合外部排序。

計數排序:桶排序的一種特殊情況。資料範圍不大時,可以按資料範圍劃分桶的個數,在每個桶中放入相同的資料。比如統計成績分數排名。

基數排序:按照每一位來進行排序。

7.二分查詢

首先,假設表中元素是按公升序排列,將表中間位置記錄的關鍵字與查詢關鍵字比較,如果兩者相等,則查詢成功;否則利用中間位置記錄將表分成前、後兩個子表,如果中間位置記錄的關鍵字大於查詢關鍵字,則進一步查詢前一子表,否則進一步查詢後一子表。重複以上過程,直到找到滿足條件的記錄,使查詢成功,或直到子表不存在為止,此時查詢不成功。

時間複雜度o(logn)

8.雜湊演算法

雜湊演算法即將任意長度的二進位制值串對映為固定長度的二進位制串,而通過原始資料對映之後得到的二進位制串就是雜湊值。

資料結構 排序和查詢

氣泡排序 void bubblesort elemtype r,int n,int comp num,int move num if flag 0 break 快速排序 void quicksort elemtype r,int left,int right,int comp num,int mov...

資料結構之排序和查詢

快速排序是一種不穩定的排序演算法,也就是說,多個相同的值的相對位置也許會在演算法結束時產生變動 該方法的基本思想是 1 先從數列中取出乙個數作為基準數。2 分割槽過程,將比這個數大的數全放到它的右邊,小於或等於它的數全放到它的左邊。3 再對左右區間重複第二步,直到各區間只有乙個數。以乙個陣列作為示例...

資料結構實驗 查詢和排序

資料結構課的實驗,小組中給我分了這個。如果這篇東西榮幸的被你看到,而你也恰是華東理工大學計算機專業的,打算應付這個實驗的話,建議複製走後多少看看吧,說不定期末考試考到呢 直接貼 第乙個 編寫乙個程式輸出在順序表 中採用順序方法和折半方法查詢某個關鍵字的過程。include include using...