`
weiweichen1985
  • 浏览: 137669 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

冒泡,选择,插入排序

    博客分类:
  • ruby
阅读更多
$arr=[8,3,1,2,5]   #定义全局数组,用于冒泡排序
$arr1=[9,6,7,1,4]  #定义全局数组,用于选择排序
$arr2=[10,25,7,2,5,1,30,28,21]   #定义全局数组,用于插入排序
$temp=0     #全局变量,用于交换数字

#冒泡排序
puts "冒泡排序\n"
=begin
    upto循环控制冒泡次数
    downto循环控制每次比较的次数
=end
1.upto(4){ |i|
 4.downto(i){|j| ($temp=$arr[j];$arr[j]=$arr[j-1];$arr[j-1]=$temp)  if $arr[j]<$arr[j-1]}
}
#用,将每个元素连接起来进行输出
print $arr.join(","),"\n"


#选择排序
puts "\n选择排序\n"
=begin
  外层upto循环选定每次待比较的元素
  内层upto循环控制比较的元素
=end
0.upto(3){
|i| (i+1).upto(4){ |j|
  ($temp=$arr1[i];$arr1[i]=$arr1[j];$arr1[j]=$temp;) if $arr1[j]<$arr1[i]
}
}

print $arr1.join(","),"\n"

#插入排序
puts "\n插入排序\n"
=begin
      本人觉得冒泡排序其实是所有排序的一个根本出发点。。。
      无言选择几次,插入几次,最终都是将最小的数组长度-1个元素给放到最
      前面就搞定了。。。当然插入排序是最难的,花了点时间
      第一个upto循环控制比较的次数。。。
第二个upto循环开始比较,一旦发现比前面一个元素小,就停止此循环,同时记录这个元素用其下标,转向第三个upto循环依次向后挪位置就可以了,当然第一次挪位置后就要跳出来,不能再循环了。。。
=end
$num=0
$index=0
f=false
0.upto($arr2.length-1){
|i| (i+1).upto($arr2.length-1){
  |j| (f=true;$num=$arr2[j];$index=j;break) if $arr2[j]<$arr2[i]
}
if f then
0.upto($index-1){
  |n| ( ($index-1).downto(n){|m| $arr2[m+1]=$arr2[m] }; $arr2[n]=$num;break;) if $arr2[n]>$num
}
f=false
end
}

print $arr2.join(","),"\n"
分享到:
评论
2 楼 weiweichen1985 2008-04-21  
呵呵。。。用C的思想久了,突然转不过来。。。
下次一定记着。。。
1 楼 rubynroll 2008-04-21  
$temp=$arr[j];$arr[j]=$arr[j-1];$arr[j-1]=$temp

ugly, ugly, ugly !

The ruby way:

$arr[j], $arr[j-1] = $arr[j-1], $arr[j]

dito, "$temp=$arr1[i];$arr1[i]=$arr1[j];$arr1[j]=$temp" to:

$arrl[i], $arrl[j] = $arrl[j], $arrl[i]

相关推荐

Global site tag (gtag.js) - Google Analytics