分类
易语言例程

易语言快速排序(quick sort)算法源码

.版本 2 .支持库 spec .程序集 窗口程序集_启动窗口 .子程序 __启动窗口_创建完毕 .子程序 quicksort .参数 list, 整数型, 数组 .参数 m, 整数型 .参数 n, 整数型 .局部变量 key, 整数型 .局部变量 i, 整数型 .局部变量 j, 整数型 .局部变量 k, 整数型 .如果真 (m < n) k = choose_pivot (m, n) swap (list [m], list [k]) key = list [m] i = m + 1 j = n .判断循环首 (i ≤ j) .判断循环首 (i ≤ n 且 list [i] ≤ key) i = i + 1 .判断循环尾 () .判断循环首 (j ≥ m 且 list [j] > key) j = j - 1 .判断循环尾 () .如果真 (i < j) swap (list [i], list [j]) .如果真结束 .判断循环尾 () swap (list [m], list [j]) quicksort (list, m, j - 1) quicksort (list, j + 1, n) .如果真结束 ' void quicksort(int list[], int m, int n) ' { ' int key, i, j, k; ' if (m < n) ' { ' k = choose_pivot(m, n); ' swap(&list[m], &list[k]); ' key = list[m]; ' i = m + 1; ' j = n; ' while (i <= j) ' { ' while ((i <= n) && (list[i] <= key)) ' i++; ' while ((j >= m) && (list[j] > key)) ' j--; ' if (i < j) ' swap(&list[i], &list[j]); ' } ' // 交换两个元素的位置 ' swap(&list[m], &list[j]); ' // 递归地对较小的数据序列进行排序 ' quicksort(list, m, j - 1); ' quicksort(list, j + 1, n); ' } ' } .子程序 swap .参数 x, 整数型, 参考 .参数 y, 整数型, 参考 .局部变量 temp, 整数型 temp = x x = y y = temp ' void swap(int *x, int *y) ' { ' int temp; ' temp = *x; ' *x = *y; ' *y = temp; ' } .子程序 choose_pivot, 整数型 .参数 i, 整数型 .参数 j, 整数型 返回 ((i + j) ÷ 2) ' int choose_pivot(int i, int j) ' { ' return((i + j) / 2); ' } .子程序 _按钮1_被单击 .局部变量 list, 整数型, , "30000" .局部变量 i, 整数型 .局部变量 temp, 整数型 .局部变量 time, 整数型 置随机数种子 () time = 取启动时间 () .计次循环首 (取数组成员数 (list), i) list [i] = 取随机数 (, ) .计次循环尾 () quicksort (list, 1, 取数组成员数 (list)) 调试输出 (list) 调试输出 (取启动时间 () - time)
分类
易语言例程

易语言快速排序 支持倒序

这个排序数值越小速度越慢 数值越大排序速度越快 100W 0.5秒吧 如果是1000以下数值的话要7秒左右

分类
易语言例程

易语言快速排序源码

易语言快速排序源码,

.版本 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), “毫秒”)
分类
易语言模块源码

希尔排序模块源码-10万超级列表框排序只花1秒

由于需要用到高效的超级列表框排序.就利用汇编版的希尔排序来写了一下超级列表框排序.

发现,从取值-排序-显示过程才花了1秒的时间.速度是七号排序的30倍,凌晨孤星-超级列表框排序的3倍.

而这个希尔排序模块.只用增加,删减自定义数据类型成员.即可变身另一种排序,可算得上是简单实用通用型模块!!

请先编译后,再测试.

希尔排序模块源码-10万超级列表框排序只花1秒