您的位置:首页 > 职场人生

排序算法(一):快速排序

2015-12-12 08:33 686 查看
突然觉得在本科的时候自己的基本功练习的不是很过关,趁着学Python的热乎劲好好把基础算法过一过,等以后面试的时候也不会死的太惨。。。

快速排序(QuickSort):

快速排序的可以说是在数据量较大且数据够随机的情况下,平均时间复杂度最好的算法,如果你没办法判断待排序数据的随机度和规模,用QuickSort就对了。

最大时间复杂度O(n^2),平均时间复杂度O(n*logn)

讲解排序 L=[6,5,3,4,8,9,7,2,8]:

1.以上面的列表为待排序数字进行从小到大从左到右的排列,首先要设置两个标志位i,j,i指向第一个数字6,j指向最后一个数字8。

2.下面进行循环:首先保持左侧标志位i位置不变,对j操作,看L[j]的数值,如果L[i]>L[j],则交换两个数(i和j不交换,i永远在j的左侧),并j--;然后保持j不变,对i操作,看L[i]的数值,如果L[i]>L[j],则交换两数,并i++。然后重复该循环,直到i==j为止。

3.进行递归:设flag=L[i]]=L[j],经过一轮循环(我使用的是while循环)之后,flag左侧的数都比flag小,右侧的都比flag大,因此将序列分成L[0:i-1],L[i+1,len(L)-1]分别处理,这里要设置start和end,因为每次要处理的序列的起点终点都不一样。

4.递归的终止条件:当i>=j时break

源码(Python):

def QuickSort(list, start, end):
i = start
j = end
while i<j:
#初始状态满足start<end,才能进行排序
while i<j:
if list[i] > list[j]:
flag = list[i]
list[i] = list[j]
list[j] = flag
while i<j:
if list[i] > list[j]:
flag = list[i]
list[i] = list[j]
list[j] = flag
break
else:
i = i+1 #左侧下标+1
else:
j = j-1 #右侧下标-1
QuickSort(list, start, i-1)
QuickSort(list, i+1, end)


我有调用了一个Python自带的sorted()算法,书里写的sort()算法用的是归并排序,sorted算法也应该是归并排序吧......

运行时间如下:



我需要冷静

目前已经是最优化的QuickSort了,但是还是比系统函数慢,慢了整整一百倍,不知道别的语言写是不是也是这个效果......
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息