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

    本文用python语言介绍三种不同的快排实现。

    1. 一行代码实现的简洁版本

    [python] view plain copy
     
    1. quick_sort = lambda array: array if len(array) <= else quick_sort([item for item in array[1:] if item <= array[0]]) + [array[0]] + quick_sort([item for item in array[1:] if item > array[0]])  
    2.       

    2. 网上常见的快排实现

    [python] view plain copy
     
    1. def quick_sort(array, left, right):  
    2.     if left >= right:  
    3.         return  
    4.     low = left  
    5.     high = right  
    6.     key = array[low]  
    7.     while left < right:  
    8.         while left < right and array[right] > key:  
    9.             right -= 1  
    10.         array[left] = array[right]  
    11.         while left < right and array[left] <= key:  
    12.             left += 1  
    13.         array[right] = array[left]  
    14.     array[right] = key  
    15.     quick_sort(array, low, left - 1)  
    16.     quick_sort(array, left + 1, high)  

    由于快排是原地排序,因此不需要返回array。

    array如果是个列表的话,可以通过len(array)求得长度,但是后边递归调用的时候必须使用分片,而分片执行的原列表的复制操作,这样就达不到原地排序的目的了,所以还是要传上边界和下边界的。

    3.《算法导论》中的快排程序

    [python] view plain copy
     
    1. def quick_sort(array, l, r):  
    2.     if l < r:  
    3.         q = partition(array, l, r)  
    4.         quick_sort(array, l, q - 1)  
    5.         quick_sort(array, q + 1, r)  
    6.   
    7. def partition(array, l, r):  
    8.     x = array[r]  
    9.     i = l - 1  
    10.     for j in range(l, r):  
    11.         if array[j] <= x:  
    12.             i += 1  
    13.             array[i], array[j] = array[j], array[i]  
    14.     array[i + 1], array[r] = array[r], array[i+1]  
    15.     return i + 1  
  • 相关阅读:
    三、瀑布流中的ajax请求详解 Confi
    显示GridControl的横向滚动条
    耳目一新的感觉(转)
    JavaScript学习笔记——变量,作用域和内存管理
    Servlet编程笔记
    JavaScript,应该选择内嵌形式还是外链形式(Inline Code Versus External Files)
    JavaScript学习笔记——Javascript基本语法
    为主机空间添加一个phpmyadmin
    关于Post中明文传送密码以及其他
    Maven原理和Maven2新特性
  • 原文地址:https://www.cnblogs.com/eniac1946/p/8748902.html
Copyright © 2011-2022 走看看