zoukankan      html  css  js  c++  java
  • python实现快速排序

    算法导论中伪代码

       快速排序的思想是任找一个元素作为基准(pivot),对待排数组进行分组,使基准元素左边的数据比基准数据要小,右边的数据比基准数据要大,这样基准元素就放在了正确的位置上。然后对基准元素左边和右边的组进行相同的操作,最后将数据排序完成。

       这里partition相当于用快慢指针实现了把数组A分成两部分,A[left..i] ≤ pivot,A[i+1..j] > pivot。还有很多其他实现方法,比如一个指针从前往后,一个指针从后往前,每次判断是否交换并移动指针。

    def partition(arr, left, right):
        pivot = arr[right]
        i = left - 1
        for j in range(left, right):
            if arr[j] <= pivot:
                i += 1
                arr[i], arr[j] = arr[j], arr[i]
        arr[i+1], arr[right] = arr[right], arr[i+1]
        return i + 1
    
    def quick_sort(arr, left, right):
        if left < right:
            q = partition(arr, left, right)
            quick_sort(arr, left, q - 1)
            quick_sort(arr, q + 1, right)
    
    arr = [-2, 1, -3, 4, -1, 2, 1, -5, 4]
    quick_sort(arr, 0, len(arr)-1)
    print(arr)
  • 相关阅读:
    课程作业(一)
    PTA 5-3 解题报告
    作业(四)
    C#循环语句整理
    C#数组和集合整理
    作业(三)
    1.0总结
    如何在C++中产生随机数
    CLSRSC-400: A system reboot is required to continue installing.
    Upgrade a Non-CDB To a PDB on CDB
  • 原文地址:https://www.cnblogs.com/sumuyi/p/12824898.html
Copyright © 2011-2022 走看看