[python]
快速排序
import
time,random#
导入模块
def
quick_sort(mylist,start,end):
定义函数参数为需要排序的列表,起始位置,结束为
止
if
start >=end:#
判断如果起始位置大于等于结束为止则跳出函数
return
cur_val = mylist[start]#
将起始位置的值赋予新值
left = start#
将起始位置和结束位置赋予变量用左右标志
right = end
while
left
判断左右位置关系如果左边小于右边则执行
while
循环
while
cur_val <=mylist[right]
and
left
当当前值和最右边的值作
比较右边值大于当前值且左边位置小于右边位置
right-=
1#
右边位置向前移动一位
tmp = mylist[left]#
否则交换值
mylist[left]=mylist[right]
mylist[right]=tmp
while
cur_val >= mylist[left]
and
left
当当前值和最左边的值作比较
左边值大于当前值且左边位置小于右边位置
left+=
1#
左边位置向后移动一位
tmp = mylist[left]#
否则交换数据
mylist[left] = mylist[right]
mylist[right] = tmp
# print('left is {0},right is {1}'.format(left,right))
# print(mylist)
quick_sort(mylist,start,left-
1
)#
执行上面过程后当前值的左边将是比该值小而右
边的将比该值大,然后进行递归调用将左边的部分进行重新比较
quick_sort(mylist,left+
1
,end)#
将右边的部分进行重新比较直到最后都退出函数
if
__name__ ==
'__main__'
:#
定义主函数
start_time = time.time()
mylist = []
#
定义空
list
for
i
in
range
(
20000
):
#
生成两万个的随机数
res = random.randrange(
0
,
20000
)
mylist.append(res)
#
将生成的随机数添加到空列表里面
# print(mylist)
# print('
华丽的分割线
'.center(20, "#"))
# print(sorted(mylist))#
内建函数排序做对比
# print('
华丽的分割线
'.center(20,"*"))
quick_sort(mylist,
0
,
len
(mylist)-
1
)
# print(mylist)
end_time = time.time()
use_time = end_time - start_time#
执行时间差
(use_time)