Ruby插入排序的常规写法和递归写法
来源:互联网 发布:mac压缩包打不开 编辑:程序博客网 时间:2024/06/05 08:58
用循环的常规写法
arr=[5,2,3,1,4]#循环下表1~arr.length,注意初始时最左边因为只有一个值,所以可以看成左边数组0~1已经有序1.upto arr.length-1 do |outIndex| #取值 element=arr[outIndex] #生成子下标,数值为外部下标的左边一位(因为自己与自己比较没有意义) index=outIndex-1 #下标从outIndex-1 循环到 0,每次将大于element的值往右拷贝一位,同时记录下标的当前位置 while index>=0 and element<arr[index] arr[index+1]=arr[index] index-=1 end #循环退出时的下标就正好是element最后对应的位置 arr[index+1]=elementendputs arr.to_s
递归式写法,这个也是算导上的一道题目。
arr=[5,2,3,1,4]#递归式的写法这样看待问题# 为了排序[1..n],每次排序[1..n-1],然后再将A[n]插入到左边的对应位置def insertSort(arr,length) #递归的最小情况,直接返回 if length==1 return arr else #排序左边 #sort left arr=insertSort(arr,length-1) element=arr[length-1] #插入右边的值到左边已经排序好的数组中 #insert element to left index=length-2 while index>=0 and arr[index]>element arr[index+1]=arr[index] index-=1 end arr[index+1]=element end arrendputs insertSort(arr,arr.length).to_s
要注意一点就是递归不一定是更优化的写法,即使是在不计函数调用开销的情况下,递归也可能比常规方法更慢,但是递归为我们思考某个问题提供了一个更好的思路,在面对某些问题时,递归可以使问题变的异常简单。
虽然递归不一定更快,不过很多效率比较高的分治算法都需要使用到递归(或者说不用递归相当难写)
欢迎关注我的github https://github.com/luckyCatMiao
阅读全文
0 0
- Ruby插入排序的常规写法和递归写法
- 插入排序的递归写法
- 插入排序的递归写法
- strlen()函数的常规写法和递归写法
- 算法导论--插入排序递归和非递归写法
- 快速排序的递归写法
- 排序:归并排序的迭代写法与递归写法
- 二分查找的递归写法和非递归写法
- 快速排序的非递归写法
- Ruby里getter和setter的写法
- Java实现插入排序的写法
- 插入排序 递归 ruby
- 小白书之迷宫八连块的递归写法和栈写法
- 合并排序的三种不同写法,包括递归和非递归
- 合并排序的递归与非递归写法
- 归并排序非递归写法
- 递归的写法
- sql 递归的写法
- 在mybatis里面配置外部资源文件
- [LP对偶][含正权环的最大费用流] SRM 676 div1 1000pts Farmville
- dddddddd
- 如何更精准的找到你需要的开源库
- BZOJ 1101 Luogu P3455 POI 2007 Zap (莫比乌斯反演+分块)
- Ruby插入排序的常规写法和递归写法
- Java基础学习总结(1)—Java编程语言概述及环境搭建
- redis安装和redis集群配置
- 如何访问虚拟机(另一台设备)上运行的 Web 项目
- Linux下配置JDK
- JDBC为什么要使用PreparedStatement而不是Statement
- 网络工程师成长日记162-网络工程师的定位
- project euler 10 Summation of primes
- 菜鸟程序员—Andriod布局