希尔排序和快速排序 效率比对(附Python代码)

版权声明:——转载请留言询问—— https://blog.csdn.net/weixin_44344462/article/details/87980794

比对结果

随机数组长度为 1000时:

Time for heer is 0.08317700000000006
Time for quick is 0.004468999999999945

随机数组长度为10000时:

Time for heer is 8.282509
Time for quick is 0.055301000000000045

随机数组长度为20000时:

Time for heer is 34.407452
Time for quick is 0.11792299999999756

可以看出快速排序在随机序列的排序性能上要优于Sedgewick递增序列的希尔排序

Sedgewick增量序列的希尔排序

def heerSort(ar):
    Sedgewick = [1, 5, 19, 41, 109, 209, 505, 929, 2161,
                   3905, 8929, 16001, 36289, 64769, 146305,
                   260609, 587521, 1045505, 2354689, 4188161,
                   9427969, 16764929, 37730305, 67884289,
                   150958081, 268386305, 603906049, 1073643521]
    i = 0
    keeper = 0
    
    while i < 28 :
    
        if Sedgewick[i] > len(ar):
            keeper = i - 1
            break
            
        i += 1
        
    while keeper >= 0:
        i = Sedgewick[keeper]
        j = i
        
        while j < len(ar):
            p = j
            temp = ar[p]

            while p > 0 and ar[p - i] > temp:
                ar[p] = ar[p - i]
                p -= i
                
            ar[p] = temp
            j += i
            
        keeper -= 1

快速排序

def quickSort(ar):

    if len(ar) == 1 or len(ar) == 0:
        return
    else:
        base = ar[0]
        left = 0
        right = len(ar) - 1

        while left != right:

            while ar[right] >= base and left != right:
                right -= 1
                
            ar[left] = ar[right]

            while ar[left] <= base and left != right:
                left += 1
                
            ar[right] = ar[left]

        ar[left] = base
        quickSort(ar[0:left])
        quickSort(ar[left+1: len(ar)])

猜你喜欢

转载自blog.csdn.net/weixin_44344462/article/details/87980794
今日推荐