我做了一个排序算法,但后来我想也许我刚刚重新发明了快速排序。
但是我听说快速排序是 O(N^2) 最坏的情况;我认为我的算法应该只有 O(NLogN) 最坏的情况。
这和快速排序一样吗?
该算法通过交换值来工作,以便将所有小于中位数的值移动到数组的左侧。然后它在每一侧递归地工作。
算法从 i=0 开始,j = n-1
i 和 j 相互靠近,必要时交换 list[i] 和 list[j]。
这是递归之前第一次迭代的一些代码:
_list = [1,-4,2,-5,3,-6]
def in_place(_list,i,j,median):
while i<j:
a,b = _list[i],_list[j]
if (a<median and b>=median):
i+=1
j-=1
elif (a>=median and b<median):
_list[i],_list[j]=b,a
i+=1
j-=1
elif a<median:
i+=1
else:
j-=1
print "changed to ", _list
def get_median(_list):
#approximate median in O(N) with O(1) space
return -4
median = get_median(_list)
in_place(_list,0,len(_list)-1,median)
"""
changed1 to [-6, -5, 2, -4, 3, 1]
"""