如何在n个数组中找出它的中位数(python)-不用排序算法

题目中说了不允许用排序算法,但是中位数,这个很容易联想到快排。那就是可以用快排的思想。
任意挑选一个元素,以该元素为key, 划分数组为两个部分,如果左侧数组长度刚好为(n-1)/2, 那么key就为中位数, 若左侧数组长度 < (n-1)/2 , 那么中位数点在右侧,反之,中位数在左侧。然后进入相应的一侧继续寻找中位

class Solution(object):
    def findmedian(self, lists):
        if not lists:
            return None
        n=len(lists)
        if n%2==0:
            l=quicksort(lists,n//2,0,n-1)
            r=quicksort(lists,n//2-1,0,n-1)
            mid=(lists[l]+lists[r])//2.0
            return mid
        else:
            mid=quicksort(lists,n//2,0,n-1)
            return lists[mid]
    def quicksort(self,lists,k,start,end):
        l=start
        r=end
        mid=lists[l]
        while l<r:
            while l<r and lists[l]<mid:
                l+=1
            lists[r]=lists[l]
            while l<r and lists[r]>mid:
                r-=1
            lists[l]=lists[r]
        a[l]=mid

        if k==l:
            return l
        if k<l:
            return self.quicksort(lists,k,start,l-1)
        else:
            return self.quicksort(lists,k,l+1,end)

你可能感兴趣的:(剑指offer,leetcode)