關於排序 ruby版練手

2021-07-02 06:06:52 字數 1759 閱讀 6610

冒泡&選擇排序

快排兩種寫法,第一種用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...