美文网首页
5.【排序】快速排序递归与非递归

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

作者: blackzero2193 | 来源:发表于2019-11-08 10:55 被阅读0次

描述
题目链接: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

相关文章

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

    描述:题目链接:https://leetcode-cn.com/problems/sort-an-array/给定...

  • 2020-08-21 算法合集

    1. 冒泡排序 2.选择排序 3. 插入排序 4. 希尔排序 5. 归并排序(递归实现) 6. 快速排序(递归实现...

  • 三大排序算法

    归并排序[稳定的排序算法] 递归实现 非递归实现 快速排序[不稳定的排序算法] 堆排序[不稳定的排序算法]

  • PHP数组示例算法

    1、冒泡排序 2、归并排序 3、二分查找-递归 4、二分查找-非递归 5、快速排序 6、选择排序 7、插入排序

  • 排序

    八大排序算法 一、归并排序 递归及非递归的JAVA实现 二、快速排序 快排算法JAVA实现 三、堆排序 堆排序堆排...

  • 常见排序算法(6)--归并排序(非递归版)

    非递归归并排序算法 非递归排序与递归排序相反,将一个元素与相邻元素构成有序数组,再与旁边数组构成有序数组,直至整个...

  • 常见算法的 Python 实现

    二分法查找 非递归版本: 递归方法实现: 冒泡排序 选择排序

  • 算法设计与分析——5.排序与树结构

    5.1 引言 5.2 递归与排序 5.2.1 选择排序 代码 5.1 选择排序的递归实现 代码 5.2 选择排序...

  • 快速排序 - 非递归

  • 常见排序算法

    这里介绍四种排序算法,选择排序、快速排序、归并排序、计数排序 选择排序(使用递归) 选择排序(使用循环) 快速排序...

网友评论

      本文标题:5.【排序】快速排序递归与非递归

      本文链接:https://www.haomeiwen.com/subject/nakbbctx.html