如果在一次循环中,最后的某些元素没有交换过,则说明后面这些元素的顺序已排序,下次循环可不对其进行比较。本方法主要考虑要排序的数组元素的范围,而不是每一轮排序都将数组元素的范围减少1。
http://www.511yj.com/eyuyan-px-1.html
生成无序随机数按钮
产生30个随机数
.版本 2 .子程序 _刷新图形按钮_被单击 .局部变量 变量, 整数型 .局部变量 数据, 整数型 未排序列表框.清空 () 结果列表框.清空 () 清除数组 (数据数组) .计次循环首 (30, 变量) ' 随机生成30个无序数 置随机数种子 () 数据 = 取随机数 (0, 1000) - 500 未排序列表框.加入项目 (到文本 (数据), ) 加入成员 (数据数组, 数据) .计次循环尾 ()
排序按钮
.版本 2 .子程序 _计算图形按钮_被单击 .局部变量 未比数据数量, 整数型 .局部变量 交换变量, 整数型 .局部变量 位置变量, 整数型 .局部变量 最后位置, 整数型 .计次循环首 (结果列表框.取项目数 (), ) 结果列表框.删除项目 (0) .计次循环尾 () 未比数据数量 = 未排序列表框.取项目数 () ' 第一行排序比较所有数 .判断循环首 (未比数据数量 > 0) 最后位置 = 0 .变量循环首 (1, 未比数据数量 - 1, 1, 位置变量) .如果真 (数据数组 [位置变量] > 数据数组 [位置变量 + 1]) ' 前一个数大于后一个数,就将两数的位置交换 交换变量 = 数据数组 [位置变量] ' 数据组可以是变量、文件、数据库(这里用的是变量) 数据数组 [位置变量] = 数据数组 [位置变量 + 1] 数据数组 [位置变量 + 1] = 交换变量 ' 以上3行代码是交换用的 最后位置 = 位置变量 .如果真结束 .变量循环尾 () 未比数据数量 = 最后位置 ' 下一行排序从第一个数开始到上次排序的最后被改变的位数 .判断循环尾 () .计次循环首 (30, 位置变量) ' 输出排序结果 结果列表框.加入项目 (到文本 (数据数组 [位置变量]), ) .计次循环尾 ()