我做了一个排序算法,但后来我想也许我刚刚重新发明了快速排序。

但是我听说快速排序是 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]
"""

最佳答案

http://en.wikipedia.org/wiki/Quicksort#Selection-based_pivoting

关于algorithm - 我发明了一种新的排序算法吗?或者这和快速排序一样吗,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9779011/

10-12 19:35