主页 > 知识库 > Ruby实现插入排序算法及进阶的二路插入排序代码示例

Ruby实现插入排序算法及进阶的二路插入排序代码示例

热门标签:买了外呼系统不想用了怎么办 武汉呼叫中心外呼系统线路商 电话机器人电话卡封号怎么办 开封百应电销机器人联系方式 邯郸外呼调研线路 浦东上海400开头的电话申请 北京语音电销机器人价格 真人语音电销机器人系统 乐昌电话机器人

基础
将一个记录插入到一个已经排序好的表中,以得到一个记录增一的有序表。并且最关键的一点就是它把比当前元素大的记录都往后移动,用以空出“自己”该插入的位置。当n-1趟插入完成后该记录就是有序序列。

def insertSort(tarray)
  i=1
  while(i  tarray.size) do
   if tarray[i]  tarray[i-1]
     j=i-1
     x=tarray[i]
   #puts x.class
   #puts tarray[i].class
     tarray[i]=tarray[i-1]#先与左侧第一个比自己大的交换位置
     while(x tarray[j].to_i) do#寻找到一个比自己小的,并放在其后
      tarray[j+1]=tarray[j]
      #puts tarray[j].class
      j=j-1
     end
     tarray[j+1]=x
   end
   i=i+1
  end
 end

a=[5,2,6,4,7,9,8]
insertSort(a)
print a

[2, 4, 5, 6, 7, 8, 9]>Exit code: 0

刚开始写代码时,在x tarray[j]处没有加to_i方法,出现了如下错误:

final.rb:10:in `': comparison of Fixnum with nil failed (ArgumentError)

一开始我很困惑,便在输出了x.class,tarray[j].class,然而这两的输出都是Fixnum。后来发现,Ruby的Array类和其他的不太一样,Ruby中允许一个Array对象中存储不同类型的元素,当a的一个元素赋值给x后,无法确定与x比较的a[i]是否是Fixnum类型,所以报错,这只是我自己的理解。

进阶
2路插入排序基于折半插入排序:

def two_way_sort data
 first,final = 0,0
 temp = []
 temp[0] = data[0]
 result = []
 len = data.length

 for i in 1..(len-1)
  if data[i]>=temp[final]
   final +=1
   temp[final] = data[i]
  elsif data[i]= temp[first]
   first = (first -1 + len)%len
   temp[first] = data[i]
  else
   if data[i]temp[0]
    low = first
    high = len -1
   
    while low =high do
     m = (low + high)>>1
     if data[i]>temp[m]
      low = m + 1
     else
      high = m -1
     end
    end
    
    j = first - 1
    first -=1
    while j  high do
     temp[j] = temp[j+1]
     j +=1
    end
 
    temp[high] = data[i]
   else
    low =0
    high = final

    while low =high do
     m =(low + high)>>1

     if data[i]>=temp[m]
      low = m + 1
     else
      high = m - 1
     end
    end

    j = final + 1
    final +=1

    while j > low do
     temp[j] = temp[j-1]
     j -=1
    end 

    temp[low] = data[i]
   end
  end 
  p temp 
 end

 i = 0
 for j in first..(len - 1)
  result[i] = temp[j]
  i +=1
 end

 for j in 0..final
  result[i] = temp[j]
  i +=1
 end

 return result
end


data = [4,1,5,6,7,2,9,3,8].shuffle

p data

result = two_way_sort data

p result

您可能感兴趣的文章:
  • 冒泡排序算法及Ruby版的简单实现
  • Ruby实现的各种排序算法
  • Ruby实现的合并排序算法
  • Ruby实现的3种快速排序算法
  • Ruby一行代码实现的快速排序
  • ruby实现的插入排序和冒泡排序算法

标签:六安 河北 宜春 石嘴山 自贡 淄博 鄂州 松原

巨人网络通讯声明:本文标题《Ruby实现插入排序算法及进阶的二路插入排序代码示例》,本文关键词  Ruby,实现,插入,排序,算法,;如发现本文内容存在版权问题,烦请提供相关信息告之我们,我们将及时沟通与处理。本站内容系统采集于网络,涉及言论、版权与本站无关。
  • 相关文章
  • 下面列出与本文章《Ruby实现插入排序算法及进阶的二路插入排序代码示例》相关的同类信息!
  • 本页收集关于Ruby实现插入排序算法及进阶的二路插入排序代码示例的相关信息资讯供网民参考!
  • 推荐文章