imath 发表于 2016-7-12 21:21:13

排序之冒泡法

本帖最后由 imath 于 2016-7-12 21:23 编辑

数组中元素排序是常见的一个算法,效率高的有二分法等等,效率低的有冒泡法、选择排序法。由于之前写iElement程序需要用到,我写了一个较为简单的计算器冒泡排序法,代码如下:
Define sortx(t)=
Func
Local n,temp,i,j
n:=dim(t)
For i,1,n-1
For j,1,n-1
If t<t Then
temp:=t
t:=t
t:=temp
EndIf
EndFor
EndFor
Return t
EndFunc大致原理是,若有1~n个元素,第i个和第i+1个元素进行大小比较,如果前者更小,那么交换两者的位置。i从1取到n-1 (一共比较n-1次)。
然后重复执行n-1次。
运行效果(实现降序排序):


算法举例:
排序:1,3,2,5
4个元素,进行3轮比较
第1轮:
3,1,2,5(第1个和第2个比较,前者比后者小,所以交换)
3,2,1,5(第2个和第3个比较,前者比后者小,所以交换)
3,2,5,1(第3个和第4个比较,前者比后者小,所以交换)
第2轮:
3,2,5,1 (第1个和第2个比较,前者比后者大,所以不变)
3,5,2,1 (第2个和第3个比较,前者比后者小,所以交换)
3,5,2,1 (第3个和第4个比较,前者比后者大,所以不变)
第3轮:
5,3,2,1 (第1个和第2个比较,前者比后者大,所以不变)
5,3,2,1 (第2个和第3个比较,前者比后者大,所以不变)
5,3,2,1 (第3个和第4个比较,前者比后者大,所以不变)

这样就实现了降序排序

zqqyyy 发表于 2016-7-13 10:32:02

这什么东西啊l u a里面有个table.sort一个函数解决问题哈哈不过也不错,就是数量大了之后会很慢......

zqqyyy 发表于 2016-7-13 10:37:52

系统不是自带了一个sortD和sortA吗,升序降序都有,没必要吧......

zqqyyy 发表于 2016-7-13 10:38:04

系统不是自带了一个sortD和sortA吗,升序降序都有,没必要吧......

zqqyyy 发表于 2016-7-13 10:39:27

顺便问一下,二分法是什么?没听说过

imath 发表于 2016-7-13 16:39:59

zqqyyy 发表于 2016-7-13 10:37
系统不是自带了一个sortD和sortA吗,升序降序都有,没必要吧......

iElement Air的灵魂函数啊

zqqyyy 发表于 2016-7-14 09:16:43

imath 发表于 2016-7-13 16:39
iElement Air的灵魂函数啊

如果只是结果的话应该没有大用,应该是在中间再加一些其他代码吧?

那么你还是没有说二分法是什么……

imath 发表于 2016-7-16 18:36:02

zqqyyy 发表于 2016-7-14 09:16
如果只是结果的话应该没有大用,应该是在中间再加一些其他代码吧?

那么你还是没有说二分法是什么……

http://baike.baidu.com/link?url=RbC9Z9dl158WrITH9do64KP5-yTx56xbaP5bZFHi92Bu470wsxGYgscvlO4H7ndJm0tNs1Wj87udRgmm8RtsA_SB4OIXmjPRaiNsQRrIVOKZA1ftQ6UDoAkqidjumomRMRSU7EnNoIEKIDTbNP1B-F2jv5sABVSdP8kKHcgMRvFH2dF8RCu5bUP62JwHo7FG
页: [1]
查看完整版本: 排序之冒泡法