python 中的sort函数效率

比自己实现的快排快500多倍。。

import time

class Solution:
    """
    @param: s: A string
    @return: A string
    """
    #自己实现的快排序
    def median(self, nums):
        # write your code here
        mid = (len(nums)+1)/2-1
        start = 0
        end = len(nums)-1
        index, nums = self.partition(nums, start, end)

        while index!=mid:
            if index>mid:
                end = index-1
                index, nums = self.partition(nums, start, end)

            if index<mid:
                start = index+1
                index, nums = self.partition(nums, start, end)
        return nums[mid]
    
    def partition(self, nums, start, end):
        key = nums[end]
        s = start
        e = end
        while s<e:
            while s<e and nums[s]<key:
                s+=1
            while s<e and nums[e]>=key:
                e-=1
            nums[s], nums[e] = nums[e], nums[s]
        nums[e], nums[end] = key, nums[e]
        return [s, nums]
    
    #python自带的sort排序,timesort
    #TimSort 算法为了减少对升序部分的回溯和对降序部分的性能倒退,将输入按其升序和降序特点进行了分区。排序的输入的单位不是一个个单独的数字,而是一个个的块-分区。其中每一个分区叫一个run。针对这些 run 序列,每次拿一个 run 出来按规则进行合并。每次合并会将两个 run合并成一个 run。合并的结果保存到栈中。合并直到消耗掉所有的 run,这时将栈上剩余的 run合并到只剩一个 run 为止。这时这个仅剩的 run 便是排好序的结果。
    #综上述过程,Timsort算法的过程包括
    #(0)如何数组长度小于某个值,直接用二分插入排序算法
    #(1)找到各个run,并入栈
    #(2)按规则合并run


    def median2(self, nums):
        # write your code here
        mid = (len(nums)+1)/2-1
        nums.sort()
        return nums[mid]

if __name__ == '__main__':
    sol=Solution()
    ss = [1,2,3,4,5,6,6]*10000
    s = time.time()
    print sol.median(ss)    
    e = time.time()
    print e-s
    s = time.time()
    print sol.median2(ss)    
    e = time.time()
    print e-s

output:
4
1.64422798157
4
0.00263595581055
[Finished in 1.7s]

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值