排序之冒泡法
本帖最后由 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个比较,前者比后者大,所以不变)
这样就实现了降序排序
这什么东西啊l u a里面有个table.sort一个函数解决问题哈哈不过也不错,就是数量大了之后会很慢...... 系统不是自带了一个sortD和sortA吗,升序降序都有,没必要吧...... 系统不是自带了一个sortD和sortA吗,升序降序都有,没必要吧...... 顺便问一下,二分法是什么?没听说过 zqqyyy 发表于 2016-7-13 10:37
系统不是自带了一个sortD和sortA吗,升序降序都有,没必要吧......
iElement Air的灵魂函数啊 imath 发表于 2016-7-13 16:39
iElement Air的灵魂函数啊
如果只是结果的话应该没有大用,应该是在中间再加一些其他代码吧?
那么你还是没有说二分法是什么…… zqqyyy 发表于 2016-7-14 09:16
如果只是结果的话应该没有大用,应该是在中间再加一些其他代码吧?
那么你还是没有说二分法是什么……
http://baike.baidu.com/link?url=RbC9Z9dl158WrITH9do64KP5-yTx56xbaP5bZFHi92Bu470wsxGYgscvlO4H7ndJm0tNs1Wj87udRgmm8RtsA_SB4OIXmjPRaiNsQRrIVOKZA1ftQ6UDoAkqidjumomRMRSU7EnNoIEKIDTbNP1B-F2jv5sABVSdP8kKHcgMRvFH2dF8RCu5bUP62JwHo7FG
页:
[1]