欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Ruby實現(xiàn)插入排序算法及進階的二路插入排序代碼示例

 更新時間:2016年06月06日 09:39:25   作者:織田信長  
插入排序即是把已有的有序序列從后向前掃描插入元素,數(shù)值大的向后移動,這里我們就來看一下使用Ruby實現(xiàn)插入排序算法及進階的二路插入排序代碼示例

基礎
將一個記錄插入到一個已經排序好的表中,以得到一個記錄增一的有序表。并且最關鍵的一點就是它把比當前元素大的記錄都往后移動,用以空出“自己”該插入的位置。當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方法,出現(xiàn)了如下錯誤:

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

一開始我很困惑,便在輸出了x.class,tarray[j].class,然而這兩的輸出都是Fixnum。后來發(fā)現(xiàn),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下WebDriver的相關操作指南

    Ruby下WebDriver的相關操作指南

    這篇文章主要介紹了Ruby下WebDriver的相關操作指南,同時也介紹了啟動firefox drive加載firebug擴展的方法,需要的朋友可以參考下
    2015-07-07
  • 一個簡單的Ruby可逆加密解密類

    一個簡單的Ruby可逆加密解密類

    這篇文章主要介紹了一個簡單的Ruby可逆加密解密類,需要的朋友可以參考下
    2014-05-05
  • Ruby實現(xiàn)生產者和消費者代碼分享

    Ruby實現(xiàn)生產者和消費者代碼分享

    這篇文章主要介紹了Ruby實現(xiàn)生產者和消費者代碼分享,本文直接給出實現(xiàn)代碼,需要的朋友可以參考下
    2015-05-05
  • Ruby中case表達式詳解

    Ruby中case表達式詳解

    本文主要介紹了Ruby中case表達式的兩種形式以及分析,有需要的朋友可以參考下
    2014-10-10
  • CentOS7下搭建ruby on rails開發(fā)環(huán)境

    CentOS7下搭建ruby on rails開發(fā)環(huán)境

    聽說rails是一個比較流行的快速開發(fā)框架,對于我這個web不熟悉的人來說,那是極好的!可以快速上手,又能真正了解服務器端的各種,所以rails搞起來。不過一個完整的開發(fā)環(huán)境搭建過程完成后,真的只能用各種坑來形容~
    2016-02-02
  • Ruby和Shell腳本實現(xiàn)判斷成績及格功能

    Ruby和Shell腳本實現(xiàn)判斷成績及格功能

    這篇文章主要介紹了Ruby和Shell腳本實現(xiàn)判斷成績及格功能,使用Ruby實現(xiàn)這個功能非常簡潔優(yōu)雅,而Shell的實現(xiàn)就比較傳統(tǒng)了,需要的朋友可以參考下
    2015-01-01
  • Windows下安裝配置Ruby的debug工具ruby-debug-base19

    Windows下安裝配置Ruby的debug工具ruby-debug-base19

    這篇文章主要介紹了Windows下安裝配置Ruby的debug工具ruby-debug-base19的方法,同時講解了Ruby的IDE RubyMine中的相關配置方法,需要的朋友可以參考下
    2016-03-03
  • ruby 程序的執(zhí)行順序

    ruby 程序的執(zhí)行順序

    ruby程序的執(zhí)行是順序執(zhí)行的,他是從腳本的第一行執(zhí)行到最后一行,但是實際執(zhí)行順序是
    2008-12-12
  • 深入理解Ruby on Rails中的緩存機制

    深入理解Ruby on Rails中的緩存機制

    這篇文章主要介紹了深入理解Ruby on Rails中的緩存機制,本文來自于IBM官方網站技術文檔,需要的朋友可以參考下
    2015-04-04
  • Ruby學習筆記之gem 命令詳解

    Ruby學習筆記之gem 命令詳解

    gem是一種文件組織的包,一般的ruby的很多插件都有由這種各種的包提供。我們來看看gem的用法
    2014-06-06

最新評論