排序演算法
文章推薦指數: 80 %
插入排序法(insertion sort). 說明:它的用途是將數字插入已排序的數列中。
輸入:n個資料的陣列A. 輸出:A陣列中的資料依一定的次序排列. 演算法:.
想想看,如果我們的電話簿不是依照姓名的筆劃數排列,而是雜亂無章隨便編排的話,當我們要尋找某個人的姓名時,是不是就要花費較多的時間,因此,當我們想要在大量的資料中尋找某一筆資料時,我們會把這些資料先做排序,而後再依據排序的規則來做搜尋,如電話簿即是一例,它就依姓名筆劃來排序,因此我們想找尋某一人電話時,只要算一算筆劃,很快地,就可以找到這個人的電話了。
例:有一陣列A存放的資料為〔27,7,2,9,4,85〕,試將此陣列由小而大排列。
交換排序法(exchangesort) 選擇排序法(selectionsort) 插入排序法(insertionsort)
合併排序法(mergesort) 快速排序法(Quicksort) 演算法的比較
交換排序法(exchangesort)
說明:
(1)拿第一個數與其他數做比較,只要數字比第一個小,則兩數交換,那麼,當全部的數都比過之後,最小數即找出,且放在第一個位置。
(2)重覆(1)的步驟,但由第2個開始比較起,直至此陣列達到已排序狀態。
(3)交換的次數較多。
(4)適用於未排序的狀況。
輸入:n個資料的陣列A
輸出:A陣列中的資料依一定的次序排列
演算法:
privateSub
Form_Activate()
DimA(n)AsInteger
DimnAsInteger
DimIAsInteger
DimJAsInteger
For
I=1ton-1
For
J:=1ton
If
A[J]0andA[j]>x
A[J+1]=A[j]
J=J-1
Loop
A[l+1]=x
NextI
EndSub
圖解:
top
合併排序法(mergesort)
說明:
(1)將數列分成(divide)兩個子數列,每一個數列擁有n/2個數字。
(2)排列每一個子數列,除非此子數列夠小(只剩一個數字),否則再繼續重覆(1)。
(3)結合(merge)每一個子數列使之成為單一數列。
輸入:n個資料的陣列A
輸出:A陣列中的資料依一定的次序排列
演算法:
privateSub
MergeSort()
DimA(n)AsInteger
DimnAsInteger
Consth=n\2
Constm=n-h
DimX(h)AsInteger
DimY(m)AsInteger
Ifn>1then
CopyA[I]throughA[h]toX
CopyA[h+I]throughA[n]toY
Mergesort(h,X)
Mergesort(m,Y)
Merge(h,m,X,Y,A)
EndIf
EndSub
圖解:
top
快速排序法(Quicksort)
說明:
(1)先找一個指標(為求方便,通常是第一個數),將,數列中大於這個指標的數,都放在右邊,反之則放在左邊。
(2)和合併排序法相似,但快速排序法的優點是比較節省空間。
輸入:n個資料的陣列A
輸出:A陣列中的資料依一定的次序排列
演算法:
privateSub
Quick_Sort()
DimA(n)AsInteger
DimnAsInteger
DimhighAsInteger
DimlowAsInteger
DimpivotAsInteger
If
high>lowthen
Partition(low,high,pivot)
Quick_Sort(low,pivot-1)
Quick_Sort(piovt+1,high)
EndIf
EndSub
實例:
top
演算法的比較
排序法名稱
優點
缺點
Exchange
交換次數很多
Insertion
適用於數列較小的情況
最耗時間
Merge
運作的時間最快
須要額外的空間來處理
Quick
運作的時間最快
須要額外空間來處理,但沒有MergeSort須要的空間多。
觀賞時請按滑鼠左鍵,可單獨觀賞或連續按下
氣泡排序法
(BubbleSort)
雙向氣泡排序法
(Bi-DirectionalBubbleSort)
快速排序法
(QuickSort)
演算法並沒有所謂的好與壞,而是視你要解決的問題來選擇較適用的演算法,且各種演算法可搭配使用,亦可自己想出一套更快更有效率的演算法。
top
延伸文章資訊
- 1數列排序(數列的升序和降序) - 程式人生
二、排序的實現方法:. 1、數列的升序方法:. Java的Arrays類中有一個sort()方法,該方法是Arrays類的靜態方法,在需要對陣列進行排序時經常用到此 ...
- 2快速入門:排序Excel 工作表中的資料
排序工作表中的資訊時,您可以重新排列資料以便能快速找到值。 您可以依一欄或多欄資料排序範圍或表格的資料。 例如,您可以先依部門排序員工,再依姓氏排序。
- 3排序(Sort)+搜尋(Search) 演算法
數列(43,35,12,9,3,99)經由氣泡排序法(Bubble Sort)由小到大. 排序,在執行時前三次(Swap)的結果各為何? 程式實作. 17. 結果. 第一次交換的結果為… 第二次...
- 4初學者學演算法|排序法入門:選擇排序與插入排序法 - Medium
重複這個方法把所有陣列裡的數都讀過一遍,就能確保目前的最小值為整個數列的最小值。實際例子如下圖:. 知道了找到最小值的步驟後, ...
- 5【Day22】[演算法]-選擇排序法Selection Sort - iT 邦幫忙- iThome
選擇排序法(Selection Sort),原理是反覆從未排序數列中找出最小值,將它與左邊的數做交換。可以有兩種方式排序,一為由大到小排序時,將最小值放到 ...