資料結構 演算法分析

2021-07-15 13:40:57 字數 2736 閱讀 9240

1)「冒泡法」

冒泡法大家都較熟悉。其原理為從a[0]開始,依次將其和後面的元素比較,

若a[0]>a[i],則交換它們,一直比較到a[n]。

同理對a[1],a[2],...a[n-1]處理,即完成排序。

voidbubble(int*a,intn)/*定義兩個引數:陣列首位址與陣列大小*/

}

冒泡法原理簡單,但其缺點是交換次數多,效率低。

下面介紹一種源自冒泡法但更有效率的方法「選擇法」。

(2)「選擇法」

選擇法迴圈過程與冒泡法一致,它還定義了記號k=i

然後依次把a[k]同後面元素比較,若a[k]>a[j],則使k=j.

最後看看k=i是否還成立,不成立則交換a[k],a[i]

這樣就比冒泡法省下許多無用的交換,提高了效率。

voidchoise(int*a,intn)

if(i!=min)

}

}

選擇法比冒泡法效率更高,但說到高效率,非「快速法」莫屬,現在就讓我們來了解它。

(3)「快速法」

快速法定義了三個引數,(陣列首位址*a,要排序陣列起始元素下標i,要排序陣列結束元素下標j).

它首先選乙個陣列元素(一般為a[ (i+j)/2 ],即中間元素)作為參照,把比它小的元素放到它的左邊,比它大的放在右邊。

然後運用遞迴,在將它左,右兩個子陣列排序,最後完成整個陣列的排序。

下面分析其**:

voidquick(int*a,inti,intj)

}

while(m<=n);

if(mquick(a,m,j);/*運用遞迴*/

if(n>i)

quick(a,i,n);

}

(4)「插入法」

插入法是一種比較直觀的排序方法。

它首先把陣列頭兩個元素排好序,再依次把後面的元素插入適當的位置。

把陣列元素插完也就完成了排序。

voidinsert(int*a,intn)

a[j+1]=temp;/*插入*/

}

}

(5)「shell法」

shell法是乙個叫 shell 的美國人與2023年發明的。

它首先把相距k(k>=1)的那幾個元素排好序,再縮小k值(一般取其一半),再排序,直到k=1時完成排序。

下面讓我們來分析其**:

voidshell(int*a,intn)

a[j+k]=x;

}

k/=2;/*縮小間距值*/

}

}

資料結構 演算法和演算法分析

一 演算法的基本概念 1.什麼是演算法 演算法 演算法是對特定問題的求解步驟,是指令的有限序列。演算法的特徵 1 演算法有0或多個輸入 2 演算法至少有乙個輸出 3 演算法的每一條指令都可以執行 4 演算法的每一條指令都有確切的定義,沒有二義。5 演算法必須總能在執行有限步以後終止。2.演算法的描述...

資料結構 遞迴 演算法分析

使用遞迴的四個法則 基準情形 base case 必須總有某種基準情形,它無須遞迴就能解出.不斷推進 progress 對於那些需要遞迴求解的情形,每一次遞迴呼叫都必須要使求解狀況朝接近基準的情形的方向推進.3.設計法則 假設所有的遞迴呼叫都能執行.4.合成效益法則 在求解乙個問題的同一例項時,切勿...

資料結構和演算法分析

1.1本書討論的內容 1.2數學知識的複習 1.3遞迴簡論 了解程式在適當輸入和巨大 輸入時的差別,明白優化代 碼採取適當資料結構的重要 指數 對數 級數 模運 算 歸納法反證法證明 指在函式的定義中使用 函式自身的方法,還較常 用於描述以自相似方法 重複事物的過程。也可 以理解為自我複製的過程。在...