5.【排序】快速排序递归与非递归

描述
题目链接:https://leetcode-cn.com/problems/sort-an-array/
给定一个整数数组 nums,将该数组升序排列。

示例 1:
输入:[5,2,3,1]
输出:[1,2,3,5]

示例 2:
输入:[5,1,1,2,0,0]
输出:[0,0,1,1,2,5]

提示:

1 <= A.length <= 10000
-50000 <= A[i] <= 50000
  • 递归:
class Solution(object):
    def sortArray(self, nums):
        """
        :type nums: List[int]
        :rtype: List[int]
        """
        if nums == None or len(nums) == 0:
            return None
        left = 0
        right = len(nums) - 1
        self.quicksort(left, right, nums)
        return nums
    def quicksort(self, left, right, nums):
        if left >= right:
            return 
        low = left
        high = right
        key = nums[left]
        while left < right:
            while left < right and nums[right] >= key:
                right -= 1
            nums[left] = nums[right]
            while left < right and nums[left] <= key:
                left += 1
            nums[right] = nums[left]
        nums[left] = key
        self.quicksort(low, left - 1, nums)
        self.quicksort(right + 1, high, nums)
  • 非递归:
class Solution(object):
    def sortArray(self, nums):
        """
        :type nums: List[int]
        :rtype: List[int]
        """
        # 辅助函数
        def pritation(left, right, nums):
            if left >= right:
                return -1
            key = nums[left]
            while left < right:
                while left < right and nums[right] >= key:
                    right -= 1
                nums[left] = nums[right]
                while left < right and nums[left] <= key:
                    left += 1
                nums[right] = nums[left]
            nums[left] = key
            return left
        
        if nums == None or len(nums) == 0:
            return None
        stack = []
        left = 0
        right = len(nums) - 1
        stack.append(right)
        stack.append(left)
        while len(stack) > 0:
            left = stack.pop()
            right = stack.pop()
            if left < right:
                k = pritation(left, right, nums)
                if k > left and k != -1:
                    stack.append(k - 1)
                    stack.append(left)
                if k < right and k != -1:
                    stack.append(right)
                    stack.append(k + 1)
        return nums
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Ruby 数组(Array) Ruby 数组是任何对象的有序整数索引集合。数组中的每个元素都与一个索引相关,并可通...
    黑夜的眸阅读 1,113评论 0 0
  • 知识点总结 二分查找法(二分查找法是弱点)**以及相关的操作:递归实现和非递归实现,floor 和 ceiling...
    李威威阅读 955评论 0 0
  • 1.Sort Colors[Sort Colors]https://leetcode.com/problems/s...
    Zake_Wang阅读 454评论 0 1
  • 一、数组定义 array() 1、索引数组 在一个变量中,存储一个或多个值。数组中的每一个元素都有一个访问ID,根...
    竹与豆阅读 547评论 0 0
  • Apache Apollo是一个代理服务器,其是在ActiveMQ基础上发展而来的,可以支持STOMP, AMQP...
    Jlan阅读 4,072评论 0 2