Fastest way to sort in Python

后端 未结 9 2100
太阳男子
太阳男子 2021-02-13 02:56

What is the fastest way to sort an array of whole integers bigger than 0 and less than 100000 in Python? But not using the built in functions like sort.

Im looking at th

9条回答
  •  时光取名叫无心
    2021-02-13 03:02

    We can use count sort using a dictionary to minimize the additional space usage, and keep the running time low as well. The count sort is much slower for small sizes of the input array because of the python vs C implementation overhead. The count sort starts to overtake the regular sort when the size of the array (COUNT) is about 1 million.

    If you really want huge speedups for smaller size inputs, implement the count sort in C and call it from Python.

    (Fixed a bug which Aaron (+1) helped catch ...) The python only implementation below compares the 2 approaches...

    import random
    import time
    
    COUNT = 3000000
    
    array = [random.randint(1,100000) for i in range(COUNT)]
    random.shuffle(array)
    
    array1 = array[:]
    
    start = time.time()
    array1.sort()
    end = time.time()
    time1 = (end-start)
    print 'Time to sort = ', time1*1000, 'ms'
    
    array2 = array[:]
    
    start = time.time()
    ardict = {}
    for a in array2:
        try:
            ardict[a] += 1
        except:
            ardict[a] = 1
    
    indx = 0
    for a in sorted(ardict.keys()):
        b = ardict[a]
        array2[indx:indx+b] = [a for i in xrange(b)]
        indx += b
    
    end = time.time()
    time2 = (end-start)
    print 'Time to count sort = ', time2*1000, 'ms'
    
    print 'Ratio =', time2/time1
    

提交回复
热议问题