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  
  • 相关阅读:
    Xcode 4.1~4.6 + iOS 5、iOS 6免证书(iDP)开发+真机调试+生成IPA全攻略
    Java程序员快速入门Go语言
    企业站常用的点击后弹出下拉菜单导航
    企业站常用漂亮横向导航菜单
    点击弹出弹性下拉菜单效果
    很酷的伸缩导航菜单效果,可自定义样式和菜单项。
    导航条点击按钮切换效果
    不错的二级导航菜单特效
    商城常用产品分类导航条
    css实现鼠标经过导航文字偏位效果
  • 原文地址:https://www.cnblogs.com/eniac1946/p/8748902.html
Copyright © 2011-2022 走看看