首页 > 编程语言 > 详细

基本排序算法

时间:2015-06-18 23:56:18      阅读:409      评论:0      收藏:0      [点我收藏+]

快速排序(n*lgn 不稳定):数组中随机选取一个数x(这里选择最后一个),将数组按比x大的和x小的分成两部分,再对剩余两部分重复这个算法直到结束。

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

冒泡排序(n^2 稳定):如果a[n] > a[n+1] 则调换,冒泡排序一遍后的最大的值会被放在最后,然后依次对前n-1项再进行冒泡排序。

def bubble_sort(a)
  (a.length-2).downto(0) {|i| i.times{|j| a[j],a[j+1] = a[j+1],a[j] if a[j]>a[j+1]}}
end

选择排序(n^2 不稳定):在n中选择最小值插入数组前端,然后再在后n-1项中找最小值放在数组第二个。

def selection_sort(a)
  a.length.times do |i|
    t = a.index(a[i..-1].min) #select the index of the next smallest element
    a[i], a[t] = a[t], a[i] #swap
  end
end

插入排序 (n^2 稳定):在数组开始处新建一个排序好的数组,然后对于之后的每个新扫描的值,插入之前排序好的数组的相应位置。

def insertion_sort(a)
  (1...a.length).each do |i|
    if a[i-1] > a[i]
      temp = a[i] #store the number to be inserted
      j = i
      while j > 0 and a[j-1] > temp
        a[j] = a[j-1] #move every elements in the array which is greater than the inserted number forward
        j -= 1
      end
      a[j] = temp #insert the number
    end
  end
end

基本排序算法

原文:http://www.cnblogs.com/lilixu/p/4587307.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!