📜  用于迭代快速排序的Python程序(1)

📅  最后修改于: 2023-12-03 14:56:22.708000             🧑  作者: Mango

用于迭代快速排序的Python程序

简介

快速排序(QuickSort)是一种效率较高的排序算法,但通常使用递归方式实现。本文介绍一种基于循环迭代的快速排序算法实现方式,使用 Python 语言编写。

实现思路

快速排序的主要思路是通过一趟排序将待排序序列分割成独立的两部分,其中一部分的所有元素比另一部分的所有元素都要小,然后再按此方法对这两部分分别进行快速排序,整个过程可以递归进行,直到排序完成。

而本文介绍的循环迭代方式,通过使用 栈(Stack)数据结构来实现递归的功能。具体实现步骤如下:

  1. 将整个序列的起始下标与结束下标入栈,作为起始状态;
  2. 取出栈顶的起始状态,即得到当前要排序的子序列的起始下标与结束下标;
  3. 选取该子序列的任意一个元素为基准(通常为首元素或末元素),并将数组中小于基准的元素放在基准的左侧,大于基准的元素放在基准的右侧,得到基准的位置;
  4. 将新的起始状态(起始下标与基准位置-1)与(基准位置+1)与结束下标)入栈;
  5. 重复执行 2~4 步,直到栈为空。
程序代码

下面是使用 Python 语言实现的用于迭代快速排序的程序代码片段:

def quick_sort_iterative(arr):
    if len(arr) <= 1:
        return arr
    
    stack = [(0, len(arr) - 1)]
    while stack:
        low, high = stack.pop()
        if low < high:
            pivot_idx = partition(arr, low, high)
            stack.append((low, pivot_idx - 1))
            stack.append((pivot_idx + 1, high))
    
    return arr
    
def partition(arr, low, high):
    pivot_idx = low
    pivot = arr[high]
    
    for i in range(low, high):
        if arr[i] < pivot:
            arr[i], arr[pivot_idx] = arr[pivot_idx], arr[i]
            pivot_idx += 1
    
    arr[pivot_idx], arr[high] = arr[high], arr[pivot_idx]
    
    return pivot_idx

以上代码中的 quick_sort_iterative 函数实现了循环迭代方式的快速排序算法,而 partition 函数则是实现了快排中的分区(Partition)功能,将待排序的子序列划分为左右两部分。stack 则用于存储序列的起始状态,它是一个栈结构,我们可以使用 Python 中的列表来实现。在栈中存储的是子序列的起始下标与结束下标,起始状态为整个序列的起始下标与结束下标。在每次排序时,从栈中取出一个状态,确定子序列的起始和结束位置,再对该子序列进行分区操作和更新栈(将分区后的左右子序列的起始和结束位置入栈)。在栈为空时即为排序完成,返回序列本身即可。

使用示例

使用示例代码如下:

arr = [8, 4, 2, 1, 3, 7, 5, 6]
sorted_arr = quick_sort_iterative(arr)
print(sorted_arr)

运行输出结果为:

[1, 2, 3, 4, 5, 6, 7, 8]

以上程序演示了使用循环迭代方式对一个无序的整型数组进行排序,并输出排序后的结果。