快速排序通常称其为分治法(Divide-and-ConquerMethod),是C.R.A.Hoare于1962年提出的一种划分交换排序,快速排序使用分治法(Divide and conquer)策略来把一个串行(list)分为两个子串行(sub-lists)。
快速排序又是一种分而治之思想在排序算法上的典型应用。本质上来看,快速排序应该算是在冒泡排序基础上的递归分治法。相对于其他排序,快速排序算是比较快的一种。
基本思想是:
1.先从数列中取出一个数作为基准数(pivot)。
2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。
3.再对左右区间重复第二步,直到各区间只有一个数。
这个基准数,可以随机选出一个数,为了优化,在易语言里我们取数列的中间,其实是采用了递归折半的方法来实现快速排序的。
快速排序
.版本 2
.子程序 快速排序
.参数 arr, 整数型, 数组
.参数 l, 整数型
.参数 r, 整数型
.局部变量 key, 整数型
.局部变量 i, 整数型
.局部变量 j, 整数型
.局部变量 临时, 整数型
i = l
j = r
key = arr [(i + j) \ 2]
.判断循环首 (i < j)
.判断循环首 (i < r 且 arr [i] < key)
i = i + 1
.判断循环尾 ()
.判断循环首 (j > l 且 arr [j] > key)
j = j - 1
.判断循环尾 ()
.如果真 (i ≤ j)
.如果 (i ≠ j)
临时 = arr [i]
arr [i] = arr [j]
arr [j] = 临时
.否则
.如果结束
i = i + 1
j = j - 1
.如果真结束
.判断循环尾 ()
.如果真 (i < r)
快速排序 (arr, i, r)
.如果真结束
.如果真 (j > l)
快速排序 (arr, l, j)
ASM
.版本 2 .子程序 asm快速排序 .参数 开始位置, 整数型 .参数 结束位置, 整数型 置入代码 ({ 139, 117, 8, 139, 125, 12, 139, 199, 43, 198, 51, 210, 185, 8, 0, 0, 0, 247, 241, 102, 185, 4, 0, 102, 247, 225, 139, 12, 6, 57, 14, 115, 10, 59, 117, 12, 116, 5, 131, 198, 4, 235, 242, 57, 15, 118, 10, 59, 125, 8, 116, 5, 131, 239, 4, 235, 242, 59, 247, 119, 14, 139, 6, 139, 23, 137, 22, 137, 7, 131, 198, 4, 131, 239, 4, 59, 247, 118, 206, 57, 125, 8, 115, 11, 86, 87, 255, 117, 8, 232, 159, 255, 255, 255, 94, 57, 117, 12, 118, 9, 255, 117, 12, 86, 232, 144, 255, 255, 255, 93, 194, 8, 0 })
asm快速排序
.版本 2
.支持库 spec
.子程序 快速排序_asm, , 公开
.参数 a, 整数型, 数组
asm快速排序 (取变量数据地址 (a), 取变量数据地址 (a) + 取数组成员数 (a) × 4 - 4)