cnCalc计算器论坛

 找回密码
 注册
搜索
查看: 3804|回复: 7

[Nspire] 排序之冒泡法

[复制链接]
发表于 2016-7-12 21:21:13 | 显示全部楼层 |阅读模式
本帖最后由 imath 于 2016-7-12 21:23 编辑

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

算法举例:
排序: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个比较,前者比后者大,所以不变)

这样就实现了降序排序
发表于 2016-7-13 10:32:02 | 显示全部楼层
这什么东西啊l u a里面有个table.sort一个函数解决问题哈哈不过也不错,就是数量大了之后会很慢......
发表于 2016-7-13 10:37:52 | 显示全部楼层
系统不是自带了一个sortD和sortA吗,升序降序都有,没必要吧......
发表于 2016-7-13 10:38:04 | 显示全部楼层
系统不是自带了一个sortD和sortA吗,升序降序都有,没必要吧......
发表于 2016-7-13 10:39:27 | 显示全部楼层
顺便问一下,二分法是什么?没听说过
 楼主| 发表于 2016-7-13 16:39:59 | 显示全部楼层
zqqyyy 发表于 2016-7-13 10:37
系统不是自带了一个sortD和sortA吗,升序降序都有,没必要吧......

iElement Air的灵魂函数啊
发表于 2016-7-14 09:16:43 | 显示全部楼层
imath 发表于 2016-7-13 16:39
iElement Air的灵魂函数啊

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

那么你还是没有说二分法是什么……
 楼主| 发表于 2016-7-16 18:36:02 | 显示全部楼层
zqqyyy 发表于 2016-7-14 09:16
如果只是结果的话应该没有大用,应该是在中间再加一些其他代码吧?

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

http://baike.baidu.com/link?url= ... dF8RCu5bUP62JwHo7FG
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|cnCalc计算器论坛

GMT+8, 2024-3-29 10:26 , Processed in 0.051919 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表