亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Ruby > 正文

Ruby實現的各種排序算法

2020-10-29 19:39:07
字體:
來源:轉載
供稿:網友

時間復雜度:Θ(n^2)

Bubble sort

復制代碼 代碼如下:

def bubble_sort(a) 
  (a.size-2).downto(0) do |i| 
    (0..i).each do |j| 
      a[j], a[j+1] = a[j+1], a[j] if a[j] > a[j+1] 
    end 
  end 
  return a 
end

Selection sort

復制代碼 代碼如下:

def selection_sort(a) 
  b = [] 
  a.size.times do |i| 
    min = a.min 
    b << min 
    a.delete_at(a.index(min)) 
  end 
  return b 
end

Insertion sort

復制代碼 代碼如下:

def insertion_sort(a) 
  a.each_with_index do |el,i| 
    j = i - 1 
      while j >= 0 
        break if a[j] <= el 
        a[j + 1] = a[j] 
        j -= 1 
      end 
    a[j + 1] = el 
  end 
  return a 
end 

 Shell sort
 

復制代碼 代碼如下:

def shell_sort(a) 
  gap = a.size 
  while(gap > 1) 
    gap = gap / 2 
    (gap..a.size-1).each do |i| 
      j = i 
      while(j > 0) 
        a[j], a[j-gap] = a[j-gap], a[j] if a[j] <= a[j-gap] 
        j = j - gap 
      end 
    end 
  end 
  return a 
end

時間復雜度:Θ(n*logn)

Merge sort

復制代碼 代碼如下:

def merge(l, r) 
  result = [] 
  while l.size > 0 and r.size > 0 do 
    if l.first < r.first 
      result << l.shift 
    else 
      result << r.shift 
    end 
  end 
  if l.size > 0 
    result += l 
  end 
  if r.size > 0 
    result += r 
  end 
  return result 
end 
 
def merge_sort(a) 
  return a if a.size <= 1 
  middle = a.size / 2 
  left = merge_sort(a[0, middle]) 
  right = merge_sort(a[middle, a.size - middle]) 
  merge(left, right) 
end 

Heap sort

復制代碼 代碼如下:

def heapify(a, idx, size) 
  left_idx = 2 * idx + 1 
  right_idx = 2 * idx + 2 
  bigger_idx = idx 
  bigger_idx = left_idx if left_idx < size && a[left_idx] > a[idx] 
  bigger_idx = right_idx if right_idx < size && a[right_idx] > a[bigger_idx] 
  if bigger_idx != idx 
    a[idx], a[bigger_idx] = a[bigger_idx], a[idx] 
    heapify(a, bigger_idx, size) 
  end 
end 

def build_heap(a) 
  last_parent_idx = a.length / 2 - 1 
  i = last_parent_idx 
  while i >= 0 
    heapify(a, i, a.size) 
    i = i - 1 
  end 
end 
 
def heap_sort(a) 
  return a if a.size <= 1 
  size = a.size 
  build_heap(a) 
  while size > 0 
    a[0], a[size-1] = a[size-1], a[0] 
    size = size - 1 
    heapify(a, 0, size) 
  end 
  return a 
end 

Quick sort

復制代碼 代碼如下:

def quick_sort(a) 
  (x=a.pop) ? quick_sort(a.select{|i| i <= x}) + [x] + quick_sort(a.select{|i| i > x}) : [] 
end 

時間復雜度:Θ(n)

Counting sort

復制代碼 代碼如下:

def counting_sort(a) 
  min = a.min 
  max = a.max 
  counts = Array.new(max-min+1, 0) 
 
  a.each do |n| 
    counts[n-min] += 1 
  end 
 
  (0...counts.size).map{|i| [i+min]*counts[i]}.flatten 
end 

Radix sort

復制代碼 代碼如下:

def kth_digit(n, i) 
  while(i > 1) 
    n = n / 10 
    i = i - 1 
  end 
  n % 10 
end 
 
def radix_sort(a) 
  max = a.max 
  d = Math.log10(max).floor + 1 
 
  (1..d).each do |i| 
    tmp = [] 
    (0..9).each do |j| 
      tmp[j] = [] 
    end 
 
    a.each do |n| 
      kth = kth_digit(n, i) 
      tmp[kth] << n 
    end 
    a = tmp.flatten 
  end 
  return a 
end 

Bucket sort
復制代碼 代碼如下:

def quick_sort(a) 
  (x=a.pop) ? quick_sort(a.select{|i| i <= x}) + [x] + quick_sort(a.select{|i| i > x}) : [] 
end 
 
def first_number(n) 
  (n * 10).to_i 
end 
 
def bucket_sort(a) 
  tmp = [] 
  (0..9).each do |j| 
    tmp[j] = [] 
  end 
   
  a.each do |n| 
    k = first_number(n) 
    tmp[k] << n 
  end 
 
  (0..9).each do |j| 
    tmp[j] = quick_sort(tmp[j]) 
  end 
 
  tmp.flatten 
end 
 
a = [0.75, 0.13, 0, 0.44, 0.55, 0.01, 0.98, 0.1234567] 
p bucket_sort(a) 
 
# Result:  
[0, 0.01, 0.1234567, 0.13, 0.44, 0.55, 0.75, 0.98] 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美激情视频播放| 中文字幕日韩视频| 久久久久久中文字幕| 亚洲欧美中文字幕| 91国偷自产一区二区三区的观看方式| 亚洲综合在线播放| 欧美孕妇孕交黑巨大网站| 97精品国产91久久久久久| 91理论片午午论夜理片久久| 久久亚洲电影天堂| 亚洲欧美另类在线观看| 中文日韩在线观看| 精品国产一区久久久| 91久久久精品| 亚洲视频自拍偷拍| 国产亚洲一级高清| 欧亚精品在线观看| 国产一区二区三区免费视频| 成人h视频在线观看播放| 欧美天堂在线观看| 欧美国产日韩一区二区| 一区二区三区在线播放欧美| 亚洲国产精品国自产拍av秋霞| 中文字幕精品在线视频| 国产精品久久精品| 欧美在线视频播放| 欧美在线激情视频| 欧美成人手机在线| 国产成人免费91av在线| 国产成人精品久久| 亚洲精品动漫久久久久| 欧美日韩国产区| 美日韩精品免费观看视频| 久久伊人精品一区二区三区| 午夜免费在线观看精品视频| 欧美在线视频免费播放| 久久久欧美一区二区| 亚洲福利在线播放| 久久成年人免费电影| 91精品久久久久久久久久久久久久| 国产精品91免费在线| 欧美午夜精品久久久久久浪潮| 日韩在线资源网| 日韩大片在线观看视频| 国产一区二区三区丝袜| 亚洲免费电影在线观看| 大胆人体色综合| 综合国产在线观看| 日韩成人高清在线| 日韩电影中文字幕一区| 欧美噜噜久久久xxx| 国产精品扒开腿爽爽爽视频| 91免费人成网站在线观看18| 亚洲成人a**站| 亚洲欧美中文在线视频| 国产精品久久99久久| 日韩电影在线观看免费| 色婷婷综合久久久久| 中文字幕日韩综合av| 国产精品99久久久久久www| 丝袜情趣国产精品| 日韩电影免费观看中文字幕| 欧美亚州一区二区三区| 亚洲欧美国产另类| 国产成+人+综合+亚洲欧洲| 成人免费在线网址| 亚洲精品久久久一区二区三区| 成人97在线观看视频| 欧美极品少妇xxxxⅹ喷水| 正在播放欧美一区| 久久久久久国产精品美女| 美女视频黄免费的亚洲男人天堂| 97精品视频在线| 国产成人精品999| 亚洲999一在线观看www| 色播久久人人爽人人爽人人片视av| 97国产精品视频| 亚洲国产精品国自产拍av秋霞| 精品动漫一区二区| 国产精品欧美激情在线播放| 亚洲国产古装精品网站| 一区二区亚洲精品国产| 亚洲人成毛片在线播放| 黑人巨大精品欧美一区免费视频| 亚洲视频专区在线| 久久亚洲电影天堂| 欧美日韩综合视频| 91国产视频在线播放| 国产成人综合精品在线| 日韩在线一区二区三区免费视频| 91久热免费在线视频| 国产精品av电影| 欧美人与性动交a欧美精品| 国产一区二区三区视频在线观看| 色偷偷88888欧美精品久久久| 国产啪精品视频网站| 久久激情视频久久| 色偷偷偷综合中文字幕;dd| 久久精品99久久久久久久久| 欧美精品videos性欧美| 久久亚洲精品国产亚洲老地址| 热门国产精品亚洲第一区在线| 日韩精品在线观看视频| 久久婷婷国产麻豆91天堂| 欧美高清电影在线看| 国产精品嫩草影院久久久| 亚洲欧美另类在线观看| 亚洲精品99999| 欧亚精品中文字幕| 久久久国产在线视频| 久久偷看各类女兵18女厕嘘嘘| 中文字幕日韩欧美精品在线观看| 狠狠躁夜夜躁久久躁别揉| 亚洲福利视频在线| 亚洲2020天天堂在线观看| 久久久国产视频91| 亚洲成人av片| 国产日韩在线看| 91精品国产高清久久久久久久久| 亚洲欧美日韩综合| 国产一区二中文字幕在线看| 亚洲综合最新在线| 亚洲最大福利网| 成人国内精品久久久久一区| 欧美日韩在线视频一区二区| 国产精品福利网站| 精品久久在线播放| 91精品视频在线播放| 成人免费在线视频网址| 精品成人av一区| 国产精品日韩在线播放| 亚洲黄在线观看| 欧美成人三级视频网站| 日韩成人激情在线| 日韩免费中文字幕| 亚洲全黄一级网站| 日韩成人av在线| 亚洲一区二区三区四区视频| 亚洲国产日韩欧美在线图片| 欧美激情xxxx性bbbb| 国产69久久精品成人| 亚洲视频国产视频| 日韩精品亚洲精品| 精品亚洲男同gayvideo网站| 日韩精品电影网| 日韩在线免费高清视频| 亚洲精品久久久久久久久久久| 欧美高清视频一区二区| 91在线无精精品一区二区| 日韩av在线一区| 欧美日韩性视频在线| 国内精品久久影院| 久久五月情影视| 欧美午夜激情小视频| 国产精品免费小视频| 成人精品一区二区三区电影免费| 国产精品视频一| 一区二区欧美在线| 精品亚洲一区二区三区在线播放| 91在线观看免费高清| 亚洲精品之草原avav久久| 日本高清视频一区| 日韩高清中文字幕| 性欧美xxxx|