.版本 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)
易语言quicksort
易语言快速排序