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

编程入门 行业动态 更新时间:2024-10-11 15:16:29
插入排序即是把已有的有序序列从后向前扫描插入元素,数值大的向后移动,这里我们就来看一下使用Ruby实现插入排序算法及进阶的二路插入排序代码示例

基础将一个记录插入到一个已经排序好的表中,以得到一个记录增一的有序表。并且最关键的一点就是它把比当前元素大的记录都往后移动,用以空出“自己”该插入的位置。当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 enda=[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 resultenddata = [4,1,5,6,7,2,9,3,8].shufflep dataresult = two_way_sort datap result

  • 0
  • 0
  • 0
  • 0
  • 0

更多推荐

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

本文发布于:2023-06-11 18:53:02,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/641385.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:进阶   示例   算法   二路   代码

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!