数组—找出数组的第k大的数

'''
找出数组的第k大的数:[6,7,8,9, 3, 2, 4, 8]第3大的数是4
'''


class Solution:
    def call(self, nums, k):
        if nums == None or len(nums) == 0:
            return -1
        result = self.qsort(nums, 0, len(nums) - 1, k)
        return result

    def qsort(self, nums, L, u, k):
        '''
        快排的一次快排操作函数
        :param nums: 
        :param L: 左边
        :param u: 右边
        :param k: 第k大
        :return: 
        '''
        if L >= u:
            return nums[u]

        m = L
        for i in range(L + 1, u + 1):  # u + 1保证遍历到u位置的值
            # 以nums[L]为基准,只要m右边的比它大就转到m左边
            if nums[i] > nums[L]:
                m += 1
                nums[m], nums[i] = nums[i], nums[m]
        # 此时,m左边的比nums[m]大,右边的比nums[m]小
        nums[m], nums[L] = nums[L], nums[m]
        # m左边有k-1个数时,第k大的数就是nums[m]
        if m + 1 == k:
            return nums[m]
        elif m + 1 > k:  # 左边大于k-1个数时,第k大在左边
            return self.qsort(nums, L, m - 1, k)
        else:  # 小于k时,第k大在右边
            return self.qsort(nums, m + 1, u, k)


s = Solution()
print(s.call([6, 7, 9, 3, 2, 4, 8], 4))
#第4大的是数字6
#6

 

posted @ 2019-03-15 22:48  jj千寻  阅读(104)  评论(0编辑  收藏  举报