215. Kth Largest Element in an Array 总结一下排序算法

  1. 冒泡排序
    两两比较,把最大的放在最后,然后次大的放倒数第二,依次执行。。。
class Solution:
    def findKthLargest(self, nums, k):
        """
        :type nums: List[int]
        :type k: int
        :rtype: int
        """
        for i in range(len(nums)):
            for j in range(len(nums) - i - 1):
                if nums[j] > nums[j+1]:
                    nums[j], nums[j+1] = nums[j+1], nums[j]
        return nums[len(nums) - k]

2.选择排序
从list中比较所有的选择最大的和最后一个元素交换,重复此动作。

class Solution:
    def findKthLargest(self, nums, k):
        """
        :type nums: List[int]
        :type k: int
        :rtype: int
        """
        for i in range(k):
            temp = 0
            for j in range(len(nums)-i):
                if nums[j] > nums[temp]:
                    temp = j
            nums[temp], nums[len(nums)-i-1] = nums[len(nums)-i-1], nums[temp]
        return nums[len(nums)-k]
  1. 快速排序
    每次选最右边为pivot,小于pivot放在左侧,大于pivot的放在右侧,如果k在左边就继续排左边,要不然就不管左边,继续排右边。
class Solution:
    def findKthLargest(self, nums, k):
        """
        :type nums: List[int]
        :type k: int
        :rtype: int
        """
        return self.findKthSmallest(nums, len(nums)+1-k)
    
    def findKthSmallest(self, nums, k):
        # if len(nums) == 1:
        #     return nums[0]
        
        pivot = self.partition(nums, 0, len(nums) - 1)
        
        if k > pivot + 1:
            return self.findKthSmallest(nums[pivot+1:], k-pivot-1)
        elif k < pivot + 1:
            return self.findKthSmallest(nums[:pivot], k)
        else:
            return nums[pivot]
    def partition(self, nums, l, r):
        pos = l
        while l < r:
            if nums[l] < nums[r]:
                nums[l], nums[pos] = nums[pos], nums[l]
                pos += 1
            l += 1
        nums[pos], nums[r] = nums[r], nums[pos]
        return pos
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 排序算法几种分类方式: 1,稳定排序和不稳定排序 如果a==b, 当排序之前a在b的前面,排序后,a仍然在b...
    fly_ever阅读 447评论 0 0
  • 该篇文章主要介绍了算法基础以及几种常见的排序算法:选择排序、插入排序、冒泡排序、快速排序、堆排序。 一、算法基础 ...
    ZhengYaWei阅读 1,275评论 0 12
  • 本文总结十大经典排序算法及变形,并提供Java实现。参考文章:十大经典排序算法总结(Java语言实现)快速排序算法...
    Steven1997阅读 17,743评论 3 185
  • 眼下,又到了百花盛开的时节。 最近朋友圈被各种漂亮的花刷屏,从开始的白玉兰,红玉兰,海棠花,红叶李,到后来的桃花,...
    2fc3e4edb53c阅读 641评论 1 2
  • 工欲善其事,必先利其器!一代人淘汰上一代人,主要是工具的掌握! 日历系统:电子版!同步!放行程! 90天做一件事影...
    纸上芭蕾阅读 361评论 0 0