冒泡&選擇排序
快排兩種寫法,第一種用ruby的partition,簡短,第二種為常規快排寫法
arr1 = [4, 6, 2, 7, 1, 3, 8, 9, 5, 0]
arr2 = [8, 12, 4, 14, 2, 6, 16, 18, 10, 20]
arr3 = [8, 12, 4, 14, 2, 6, 16, 18, 10, 20]
arr4 = [8, 12, 4, 14, 2, 6, 16, 18, 10, 20]
#冒泡——兩兩比較,發現兩元素的次序相反時即交換
def bubble_sort(arr)
0.upto(arr.length - 1) do |i|
1.upto(arr.length - 1 - i) do |j|
if ( arr[j-1] > arr[j] )
tmp = arr[j-1]
arr[j-1] = arr[j]
arr[j] = tmp
endend
endendbubble_sort(arr1)
p arr1
#選擇排序——每次從待排資料彙總選出最值,放在已拍好的序列最後
def selection_sort(arr)
0.upto(arr.length - 2) do |i|
(i+1).upto(arr.length - 1) do |j|
if(arr[i] > arr[j])
tmp = arr[i]
arr[i] = arr[j]
arr[j] = tmp
endend
endendinsert_sort(arr2)
p arr2
#快排——ruby方法partition ——選擇一基準元素,劃分左右兩個無序區間,該基準元素放在其最終位置上,再不斷遞迴快排左右兩序列,最壞o(n^2),平均o(nlogn)
def qsort(arr)
return arr if arr.length == 0
mid = arr[0]
a = arr[1...arr.length]
# mid, a = arr
small, big = a.partition do |tmp|
tmp < mid
endreturn qsort(small) + [mid] + qsort(big)
endp qsort(arr3)
#快排def qsort2(arr, lef, rig)
return if lef >= rig
i = lef
j = rig
mid = arr[lef]
pos = lef
while (i < j)
while( i < j && arr[j] >= mid)
j = j - 1
endwhile( i < j && arr[i] <= mid)
i = i+1
endif (i <= j)
arr[pos] = arr[j]
arr[j] = arr[i]
arr[i] = mid
pos = i
endend
qsort2(arr, lef, pos - 1)
qsort2(arr, pos + 1, rig)
endp arr4
qsort2(arr4, 0, arr4.length - 1)
p arr4
氣泡排序演算法及Ruby版的簡單實現
演算法原理 比較相鄰的元素。如果第乙個比第二個大,就交換他們兩個。對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。針對所有的元素重複以上的步vfdivkenq驟,除了最後乙個。持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。實現...
選擇排序 ruby
先尋找最小的數與array 0 交換,再尋找第二小的數和array 1 交換。array 31,41,59,26,41,58 0.upto array.length 2 do count min 1000 最小值 index 0 start count while startif array sta...
Ruby排序演算法
1.氣泡排序 百科 wiki def bubble sort arr 1.upto arr.length 1 do i arr.length i times do j if arr j arr j 1 arr j arr j 1 arr j 1 arr j endend endarr endarra...