快速排序對氣泡排序的一種改進。它的基本思想是:通過一趟排序將要排序的資料分割成獨立的兩部分,其中一部分的所有資料都比另外一部分的所有資料都要小,然後再按此方法對這兩部分資料分別進行快速排序,整個排序過程可以遞迴進行,以此達到整個資料變成有序序列。
'快速排序演算法,對字串陣列進行排序
private sub quicksort(byref arrvalue() as string, byval intlx as integer, byval intrx as integer)
'arrvalue()是待排的陣列,intlx,intrx為左右邊界
dim strvalue as string
dim i as integer
dim j as integer
dim intloop as integer
i = intlx
j = intrx
dowhile arrvalue(i) <= arrvalue(j) and i < j: i = i + 1: wend
if i < j then
strvalue = arrvalue(i)
arrvalue(i) = arrvalue(j)
arrvalue(j) = strvalue
strvalue = "1: i=" & cstr(i) & " j=" & cstr(j) & " "
for intloop = 0 to ubound(arrvalue)
strvalue = strvalue & " " & arrvalue(intloop)
next
debug.print strvalue
end if
while arrvalue(i) <= arrvalue(j) and i < j: j = j - 1: wend
if i < j then
strvalue = arrvalue(i)
arrvalue(i) = arrvalue(j)
arrvalue(j) = strvalue
strvalue = "2: i=" & cstr(i) & " j=" & cstr(j) & " "
for intloop = 0 to ubound(arrvalue)
strvalue = strvalue & " " & arrvalue(intloop)
next
debug.print strvalue
end if
loop until i = j
i = i - 1: j = j + 1
debug.print vbcrlf
if i > intlx then
call quicksort(arrvalue, intlx, i)
end if
if j < intrx then
call quicksort(arrvalue, j, intrx)
end if
end sub
private sub form_load()
dim arr(8) as string
arr(0) = "r"
arr(1) = "e"
arr(2) = "a"
arr(3) = "n"
arr(4) = "b"
arr(5) = "u"
arr(6) = "c"
arr(7) = "o"
arr(8) = "f"
call quicksort(arr, 0, ubound(arr))
end sub
快速排序過程中的資料變化列表如下所示。從中可以看到一共執行了5次遞迴方法。每次執行時都是通過迴圈將陣列從中間分割成2半,大的在右邊,小的在左邊,然後再針對這2半分別呼叫下一次遞迴方法。
排序前: r e a n b u c o f
1: i=0 j=8 f e a n b u c o r
2: i=0 j=6 c e a n b u f o r
1: i=3 j=6 c e a f b u n o r
2: i=3 j=4 c e a b f u n o r
1: i=0 j=3 b e a c f u n o r
2: i=0 j=2 a e b c f u n o r
1: i=1 j=2 a b e c f u n o r
1: i=2 j=3 a b c e f u n o r
1: i=5 j=8 a b c e f r n o u
2: i=5 j=7 a b c e f o n r u
1: i=5 j=6 a b c e f n o r u
氣泡排序演算法分析及程式示例
b 例項說明 b 用氣泡排序方法對陣列進行排序。b 例項解析 b 交換排序的基本思想是兩兩比較待排序記錄的關鍵字,發現兩個記錄的次序相反時即進行交換,直到沒有反序的記錄為止。應用交換排序基本思想的主要排序方法有氣泡排序和快速排序。b 氣泡排序 b 將被排序的記錄陣列 r 1.n 垂直排列,每個記錄 ...
選擇排序演算法分析及程式示例
b 例項說明 b 用直接選擇排序方法對陣列進行排序。b 例項解析 b 選擇排序 selection sort 的基本思想是 每趟從待排序的記錄中選出關鍵字最小的記錄,順序放在已排好序的子檔案的最後,直到全部記錄排序完畢。常用的選擇排序方法有直接選擇排序和堆排序。b 直接選擇排序 straight s...
快速排序及分析
歸併排序將陣列分為兩個子陣列分別排序,並將有序的子陣列歸併使得整個陣列排序 快速排序通過乙個切分元素將陣列分為兩個子陣列,左子陣列小於等於切分元素,右子陣列大於等於切分元素,將這兩個子陣列排序也就將整個陣列排序了。public static void quicksort int list publi...