时间复杂度:Θ(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) "codetitle">复制代码 代码如下:
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]
Ruby,排序算法
稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!
昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。
这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。
而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?
更新日志
- 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE]
- 群星《欢迎来到我身边 电影原声专辑》[320K/MP3][105.02MB]
- 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨][480.9MB]
- 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓[WAV+CUE][463M]
- 群星《2024好听新歌42》AI调整音效【WAV分轨】
- 王思雨-《思念陪着鸿雁飞》WAV
- 王思雨《喜马拉雅HQ》头版限量编号[WAV+CUE]
- 李健《无时无刻》[WAV+CUE][590M]
- 陈奕迅《酝酿》[WAV分轨][502M]
- 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
- 群星《吉他王(黑胶CD)》[WAV+CUE]
- 齐秦《穿乐(穿越)》[WAV+CUE]
- 发烧珍品《数位CD音响测试-动向效果(九)》【WAV+CUE】
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 吕方《爱一回伤一回》[WAV+CUE][454M]