关于排序——ruby版练手
来源:互联网 发布:股票量化投资软件 编辑:程序博客网 时间:2024/06/18 10:16
冒泡&选择排序
快排两种写法,第一种用ruby的partition,简短,第二种为常规快排写法
arr1 = [4, 6, 2, 7, 1, 3, 8, 9, 5, 0]arr2 = [8, 12, 4, 14, 2, 6, 16, 18, 10, 20]arr3 = [8, 12, 4, 14, 2, 6, 16, 18, 10, 20]arr4 = [8, 12, 4, 14, 2, 6, 16, 18, 10, 20]#冒泡——两两比较,发现两元素的次序相反时即交换def bubble_sort(arr) 0.upto(arr.length - 1) do |i| 1.upto(arr.length - 1 - i) do |j| if ( arr[j-1] > arr[j] ) tmp = arr[j-1] arr[j-1] = arr[j] arr[j] = tmp end end endendbubble_sort(arr1)p arr1#选择排序——每次从待排数据汇总选出最值,放在已拍好的序列最后def selection_sort(arr) 0.upto(arr.length - 2) do |i| (i+1).upto(arr.length - 1) do |j| if(arr[i] > arr[j]) tmp = arr[i] arr[i] = arr[j] arr[j] = tmp end end endendinsert_sort(arr2)p arr2#快排——ruby方法partition ——选择一基准元素,划分左右两个无序区间,该基准元素放在其最终位置上,再不断递归快排左右两序列,最坏O(n^2),平均O(nlogn)def qsort(arr) return arr if arr.length == 0 mid = arr[0] a = arr[1...arr.length]# mid, a[] = arr small, big = a.partition do |tmp| tmp < mid end return qsort(small) + [mid] + qsort(big)endp qsort(arr3)#快排def qsort2(arr, lef, rig) return if lef >= rig i = lef j = rig mid = arr[lef] pos = lef while (i < j) while( i < j && arr[j] >= mid) j = j - 1 end while( i < j && arr[i] <= mid) i = i+1 end if (i <= j) arr[pos] = arr[j] arr[j] = arr[i] arr[i] = mid pos = i end end qsort2(arr, lef, pos - 1) qsort2(arr, pos + 1, rig)endp arr4qsort2(arr4, 0, arr4.length - 1)p arr4
0 0
- 关于排序——ruby版练手
- 关于归并排序的练手
- Ruby—关于Button跳转
- 练手项目—新闻浏览
- Ruby——关于require与require_relative
- 小游戏练手——斗地主单机版
- Ruby练手 -- iOS CrashLog 解析脚本
- Ruby排序
- STL 练手题 一种排序
- C# - 冒泡排序算法练手
- js各种排序算法,练手
- 【练手】全表行转列——动态SQL
- CSS+DIV练手——旅游网站
- Python练手程序——通讯录
- C++11——1.小练手
- nexys3练手——vga显示
- 小游戏练手2——跳房子
- Angularjs练手篇——Server编写
- InitializeCriticalSection
- Leetcode Remove Linked List Elements 删除链表中的元素
- 2015前端组件化框架之路
- 用post和get的方式将数据提交到api
- 正确配置java JDK的环境变量
- 关于排序——ruby版练手
- Redis 综述 [待整理]
- 什么是线程互斥
- sqoop入门
- .net学习之C#基础提高 3.基础知识
- 在jquery(1.7版)以及Ext(3.4版)中,查看在页面元素(domElement)上绑定的事件处理(listener、handler)
- linux中链接脚本ld文件详解
- 王艾辉: 5.5日晚间现货黄金、现货白银操作策略(晚间点评)
- tcp/udp缓冲区