1)「冒泡法」
冒泡法大家都較熟悉。其原理為從a[0]開始,依次將其和後面的元素比較,
若a[0]>a[i],則交換它們,一直比較到a[n]。
同理對a[1],a[2],...a[n-1]處理,即完成排序。
void
bubble(
int
*a,
int
n)
/*定義兩個引數:陣列首位址與陣列大小*/
}
冒泡法原理簡單,但其缺點是交換次數多,效率低。
下面介紹一種源自冒泡法但更有效率的方法「選擇法」。
(2)「選擇法」
選擇法迴圈過程與冒泡法一致,它還定義了記號k=i
然後依次把a[k]同後面元素比較,若a[k]>a[j],則使k=j.
最後看看k=i是否還成立,不成立則交換a[k],a[i]
這樣就比冒泡法省下許多無用的交換,提高了效率。
void
choise(
int
*a,
int
n)
if
(i!=min)
}
}
選擇法比冒泡法效率更高,但說到高效率,非「快速法」莫屬,現在就讓我們來了解它。
(3)「快速法」
快速法定義了三個引數,(陣列首位址*a,要排序陣列起始元素下標i,要排序陣列結束元素下標j).
它首先選乙個陣列元素(一般為a[ (i+j)/2 ],即中間元素)作為參照,把比它小的元素放到它的左邊,比它大的放在右邊。
然後運用遞迴,在將它左,右兩個子陣列排序,最後完成整個陣列的排序。
下面分析其**:
void
quick(
int
*a,
int
i,
int
j)
}
while
(m<=n);
if
(m
quick(a,m,j);
/*運用遞迴*/
if
(n>i)
quick(a,i,n);
}
(4)「插入法」
插入法是一種比較直觀的排序方法。
它首先把陣列頭兩個元素排好序,再依次把後面的元素插入適當的位置。
把陣列元素插完也就完成了排序。
void
insert(
int
*a,
int
n)
a[j+1]=temp;
/*插入*/
}
}
(5)「shell法」
shell法是乙個叫 shell 的美國人與2023年發明的。
它首先把相距k(k>=1)的那幾個元素排好序,再縮小k值(一般取其一半),再排序,直到k=1時完成排序。
下面讓我們來分析其**:
void
shell(
int
*a,
int
n)
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遞迴簡論 了解程式在適當輸入和巨大 輸入時的差別,明白優化代 碼採取適當資料結構的重要 指數 對數 級數 模運 算 歸納法反證法證明 指在函式的定義中使用 函式自身的方法,還較常 用於描述以自相似方法 重複事物的過程。也可 以理解為自我複製的過程。在...