易语言快速排序源码,
.版本 2
.程序集 窗口程序集_启动窗口
.子程序 QuickSort
.参数 Array, 整数型, 数组
.参数 Left, 整数型
.参数 Right, 整数型
.局部变量 i, 整数型
.局部变量 j, 整数型
.局部变量 key, 整数型
.如果真 (Left ≥ Right)
返回 ()
.如果真结束
i = Left
j = Right
key = Array [Left] ' 保存左边值
.判断循环首 (i < j)
.判断循环首 (i < j 且 Array [j] ≥ key) ' 从右边寻找一个小于key的值
j = j - 1
.判断循环尾 ()
Array [i] = Array [j] ' 找到后将该值赋值给左边
.判断循环首 (i < j 且 Array [i] ≤ key) ' 从左边寻找一个大于key的值
i = i + 1
.判断循环尾 ()
Array [j] = Array [i] ' 找到后将该值赋值给右边
.判断循环尾 ()
Array [i] = key ' 上一步左边值被覆盖,现将保存后的值归还
' 此时出循环的情况为 i = j,从右边已经找不到比key小的值或者从左边已经找不到比key大的值,所以可以暂时不理会i的值
QuickSort (Array, Left, j - 1) ' 继续排序Left到,j - 1
QuickSort (Array, i + 1, Right) ' 继续排序i + 1到,Right
.子程序 __启动窗口_创建完毕
.子程序 _按钮1_被单击
.局部变量 Array, 整数型, , "0"
.局部变量 Random, 整数型
.局部变量 i, 整数型
.局部变量 TimeStart, 整数型
.局部变量 TimeTotal, 整数型
置随机数种子 ()
编辑框1.内容 = “”
编辑框1.加入文本 (“排序前”, #换行符)
.计次循环首 (到整数 (编辑框2.内容), )
Random = 取随机数 (, 9999)
加入成员 (Array, Random)
编辑框1.加入文本 (到文本 (Random) + “ ”)
.计次循环尾 ()
编辑框1.加入文本 (#换行符, “排序后”, #换行符)
TimeStart = 取启动时间 ()
QuickSort (Array, 1, 取数组成员数 (Array))
TimeTotal = 取启动时间 () - TimeStart
.计次循环首 (取数组成员数 (Array), i)
编辑框1.加入文本 (到文本 (Array [i]) + “ ”)
.计次循环尾 ()
编辑框1.加入文本 (#换行符, “排序” + 编辑框2.内容 + “位数耗时”, #换行符, 到文本 (TimeTotal), “毫秒”)