快速排序算法说明:
设要排序的数组是
A[0]……A[N
-1]
,首先任意选取一个数据(通常选用中间的数)
作为关键数据,然后将所有比它小的数都放到它前面,所有比它大的数都放到它后面,
这个过程称为一趟快速排序。值得注意的是,快速排序不是一种稳定的排序算法,也就
是说,多个相同的值的相对位置也许会在算法结束时产生变动。
一趟快速排序的算法是:
1
)设置两个变量
i
、
j
,排序开始的时候:
i=0
,
j=N-1
;
2
)以第一个数组元素作为关键数据,赋值给
key
,即
key=A[0]
;
3
)
从
j
开始向前搜索,
即由后开始向前搜索
(
j
--
)
,
找到第一个小于
key
的值
A[j]
;
4
)从
i
开始向后搜索,即由前开始向后搜索(
i ++
),找到第一个大于
key
的
A[i]
,
A[i]
与
A[j]
交换;
5
)重复第
3
、
4
、
5
步,直到
I=J
;
(3,4
步中,没找到符合条件的值,即
3
中
A[j]
不
小于
key,4
中
A[j]
不大于
key
的时候改变
j
、
i
的值,使得
j=j-1
,
i=i+1
,直至找到为
止。找到符合条件的值,进行交换的时候
i
,
j
指针位置不变。另外,
i==j
这一过程一
定正好是
i+
或
j-
完成的时候,此时令循环结束)。
(
注:以上说明摘自百度百科
)
方法一:经典快速排序算法
下面的代码中是经典快速排序算法,并且范围正序和倒序两种排列方式:
#
正序排列函数
defqiucksortasc(arr,begin,end):
#
设定取出开始的第一个值用于判断
key=arr[begin]
#
从左边开始找大于
key
值的元素下标
pl=begin
#
从右边开始找小于
key
值的元素下标
pr=end
while 1:
#
找到从右边开始第一个小于
key
的元素
,
如果大于
key
,
pr-1
继续寻找
whilearr[pr]>key:
pr=pr-1
#
找到从左边开始第一个大于
key
的元素,如果小于
key
,
pl+1
继续寻找
whilearr[pl]
pl=pl+1
#
交换
arr[pr]
和
arr[pl]
的值
arr[pl],arr[pr]=arr[pr],arr[pl]