- 浏览: 247148 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (127)
- vim (3)
- python (44)
- pymysql (1)
- mysql (9)
- macvim (1)
- erlang (3)
- twisted (0)
- tornado (5)
- django (7)
- postgresql (5)
- sql (1)
- java (7)
- tech (4)
- cache (1)
- lifestyle (3)
- html (1)
- ubuntu (2)
- rabbitmq (1)
- algorithm (8)
- Linux (4)
- Pythonista (1)
- thread (1)
- sort (6)
- 设计模式 (1)
- search (1)
- Unix (6)
- Socket (3)
- C (2)
- web (1)
- gc (1)
- php (10)
- macos (1)
最新评论
-
2057:
这个程序有bug。
查找算法学习之二分查找(Python版本)——BinarySearch -
dotjar:
NB
一个Python程序员的进化[转]
快速排序是由東尼·霍爾所發展的一種排序算法。在平均狀況下,排序 n 個項目要Ο(n log n)次比較。在最壞狀況下則需要Ο(n2)次比較,但這種狀況並不常見。事實上,快速排序通常明顯比其他Ο(n log n) 演算法更快,因為它的內部循环(inner loop)可以在大部分的架構上很有效率地被實作出來。
快速排序使用分治法(Divide and conquer)策略來把一個序列(list)分為兩個子序列(sub-lists)。
分治法的基本思想是:将原问题分解为若干个规模更小但结构与原问题相似的子问题。递归地解这些子问题,然后将这些子问题的解组合为原问题的解。
步驟為:
1. 從數列中挑出一個元素,稱為 "基準"(pivot),
2. 重新排序數列,所有元素比基準值小的擺放在基準前面,所有元素比基準值大的擺在基準的後面(相同的數可以到任一邊)。在這個分割結束之後,該基準就處於數列的中間位置。這個稱為分割(partition)操作。
3. 递归地(recursive)把小於基准值元素的子數列和大於基准值元素的子數列排序。
遞迴的最底部情形,是數列的大小是零或一,也就是永遠都已經被排序好了。雖然一直遞迴下去,但是這個演算法總會結束,因為在每次的迭代(iteration)中,它至少會把一個元素擺到它最後的位置去。
性能分析最好情况每次基准的最终位置都是在数组中间位置,从而使规模为N的问题分为2个规模为N/2的问题,即T(n) = 2T(n/2) + Θ(n),用递归树分析或者主定理得到时间T(n) = O(nlogn)。
最坏情况每次基准的最终位置都是第一个位置,从而规模为N的问题分为一个规模为N-1的问题,即T(n) = T(n-1) + Θ(n),用递归树分析可得运行时间T(n) = O(n2)。
平均情况假设规模为N的问题分为一个规模为9/10N的问题和规模为1/10N的问题,即T(n) = T(9n/10) + T(n/10) + Θ(n),用递归树分析可得T(n) = O(nlogn),而且比分区9:1要更平均(也就是情况更好)的概率为80%,所以在绝大部分情况下快速排序算法的运行时间为O(nlogn)。
代码:
参考资料:
http://zh.wikipedia.org/zh-cn/%E5%BF%AB%E9%80%9F%E6%8E%92%E5%BA%8F
http://www.cnblogs.com/zabery/archive/2011/07/27/2118353.html
最差时间复杂度:O(n^2) |
最优时间复杂度:O(nlogn) |
平均时间复杂度:O(nlogn) |
快速排序使用分治法(Divide and conquer)策略來把一個序列(list)分為兩個子序列(sub-lists)。
分治法的基本思想是:将原问题分解为若干个规模更小但结构与原问题相似的子问题。递归地解这些子问题,然后将这些子问题的解组合为原问题的解。
步驟為:
1. 從數列中挑出一個元素,稱為 "基準"(pivot),
2. 重新排序數列,所有元素比基準值小的擺放在基準前面,所有元素比基準值大的擺在基準的後面(相同的數可以到任一邊)。在這個分割結束之後,該基準就處於數列的中間位置。這個稱為分割(partition)操作。
3. 递归地(recursive)把小於基准值元素的子數列和大於基准值元素的子數列排序。
遞迴的最底部情形,是數列的大小是零或一,也就是永遠都已經被排序好了。雖然一直遞迴下去,但是這個演算法總會結束,因為在每次的迭代(iteration)中,它至少會把一個元素擺到它最後的位置去。
性能分析最好情况每次基准的最终位置都是在数组中间位置,从而使规模为N的问题分为2个规模为N/2的问题,即T(n) = 2T(n/2) + Θ(n),用递归树分析或者主定理得到时间T(n) = O(nlogn)。
最坏情况每次基准的最终位置都是第一个位置,从而规模为N的问题分为一个规模为N-1的问题,即T(n) = T(n-1) + Θ(n),用递归树分析可得运行时间T(n) = O(n2)。
平均情况假设规模为N的问题分为一个规模为9/10N的问题和规模为1/10N的问题,即T(n) = T(9n/10) + T(n/10) + Θ(n),用递归树分析可得T(n) = O(nlogn),而且比分区9:1要更平均(也就是情况更好)的概率为80%,所以在绝大部分情况下快速排序算法的运行时间为O(nlogn)。
代码:
#!/usr/bin/env python #-*-encoding:utf-8-*- def quick_sort(L): if not L: return [] return quick_sort([x for x in L[1:] if x < L[0]]) + L[0:1] + \ quick_sort([x for x in L[1:] if x > L[0]]) def main(): L = [55,22,33,11,66,44] print quick_sort(L) if __name__=="__main__": main()
参考资料:
http://zh.wikipedia.org/zh-cn/%E5%BF%AB%E9%80%9F%E6%8E%92%E5%BA%8F
http://www.cnblogs.com/zabery/archive/2011/07/27/2118353.html
发表评论
-
macos 10.9.2 clang: error: unknown argument: '-mno-fused-madd' [-Wunused-command
2014-03-25 19:13 1759方法总是有的,当然需要你去寻找。 当然如果花费太多的时间在一件 ... -
PostgreSQL psycopg2:IndexError: tuple index out of range
2014-01-09 17:04 2231Postgresql psycopg2使用like查询的时候 ... -
Python 迭代器和生成器
2013-10-15 23:09 2849迭代器 迭代器只不过是一个实现迭代器协议的容器对象。它基于两个 ... -
Python时间模块
2013-10-15 23:03 3469time模块 时间模块中最常用的一个函数就是获取当前时间的函数 ... -
Python装饰器
2013-10-15 22:59 1568编写自定义装饰器有许多方法,但最简单和最容易理解的方法是编写一 ... -
python list
2013-10-15 22:56 1254简单总结以及整理如下: >>> dir( ... -
Python Excel
2013-09-10 17:21 975安装lib easy_install xlrd def ... -
排序算法学习(python版本)之堆排序(HeapSort)
2013-07-01 22:54 1997Contains: 堆排序以及堆排序的应用 堆排序(Heaps ... -
python range xrange
2013-06-25 23:30 1149引用Help on built-in function ran ... -
python class
2013-06-25 00:54 1829引用类是创建新对象类 ... -
AttributeError: 'module' object has no attribute 'SendCloud'
2013-06-05 11:46 7083网上查了下 意思是说你命名的文件名不能和lib重名,这样会导 ... -
python string
2013-05-07 23:44 2198如果这就是字符串,这本来就是字符串 首先看下字符串的方法 ... -
Python property
2013-03-29 19:56 0由于之前有总结过,可以参考http://2057.iteye. ... -
python tips
2013-03-28 23:57 8831、enum #!/usr/bin/env python ... -
python decorators
2013-03-28 23:36 1365Contains: 1、decorators 2、funct ... -
python closures
2013-03-28 22:09 1190Closure:如果在一个内部函数里,对在外部作用域(但不是在 ... -
Python map、filter,reduce介绍
2013-03-28 22:02 13091、filter(function,iterable) 引用C ... -
Python __new__ 、__init__、 __call__
2013-03-26 23:49 5351Contains: __new__: 创建对象时调用,返回当 ... -
Python socket简介
2013-03-25 23:42 2168自豪地使用dir和help. Python 2.7.2 ( ... -
Tornado ioloop源码简析
2013-03-21 00:18 2849#!/usr/bin/env python #-*-en ...
相关推荐
该程序包含7大排序算法: # sort.bubbleSort() #冒泡排序 ...# sort.quickSort() #快速排序 该排序算法把每次的排序结果都列出来,可供初学者学习。 self.arr存放的是待排序列表,可改成自己的数据
### Python实现快速排序的几种方法 #### 快速排序算法简介 快速排序是一种非常高效的排序算法,采用分治策略来把一个序列分为较小和较大的两个子序列,然后递归地排序两个子序列。该算法的基本思想是:选择一个基准...
以下是一个简单的Python快速排序实现: ```python def quickSort(nums, low, high): if low key = nums[low] while low while low [high] >= key: high -= 1 while low [low] low += 1 nums[low], nums...
快速排序是一种高效的排序算法,由英国计算机科学家C.A.R. Hoare在1960年提出。它的基本思想是分治法(Divide and Conquer),将一个大问题分解为两个或更多的小问题来解决。在快速排序中,我们选择一个基准元素,...
在"quicksort.zip"压缩包中的"quicksort-master"目录下,可能包含了C++和Python两种语言实现快速排序的源代码文件。通过阅读和分析这些代码,你可以更深入地理解快速排序的原理和实现细节。对于初学者,这是一个很好...
5. 与其他排序算法的比较:文档中提到了快速排序与归并排序(Mergesort)以及其他多种语言的系统排序算法的比较,如Java对于对象和基本类型的不同排序实现,以及C、Unix、Visual C++、Python、Matlab、Chrome ...
常见的算法包括排序算法(如冒泡排序、选择排序、插入排序、快速排序、归并排序和堆排序)、搜索算法(如线性搜索、二分搜索和哈希搜索)、图算法(如深度优先搜索和广度优先搜索)、动态规划以及递归算法等。...
在这个项目"Quicksort-Plain-Python"中,我们将会深入探讨如何用纯Python实现快速排序算法。 快速排序的工作原理如下: 1. **选择基准元素(Pivot Selection)**:首先,从数组中选择一个元素作为“基准”(pivot)...
- 示例中的快速排序算法定义了一个函数,通过递归的方式实现数组排序。 4. Numpy库的使用 - Numpy是Python中用于进行科学计算的一个基础库,它提供了高性能的多维数组对象和这些数组的操作工具。 - Numpy数组的...
随机快速排序(Randomized Quicksort)是一种基于分治策略的高效排序算法,它是快速排序的一个变种。在快速排序的原始版本中,选择“枢轴”(pivot)元素是固定或预先确定的,而在随机化版本中,枢轴是通过随机选择...
`usort`库可能会包含一些高级排序算法,如快速排序(quicksort)、归并排序(mergesort)或堆排序(heapsort)。这些算法相对于Python内置的TimSort算法,在特定场景下可能提供更快的排序速度,尤其是在处理大规模...
快速排序是一种高效的排序算法,其核心思想是分治法,通过递归不断地分割数组并排序。 ```python def quicksort(arr): if len(arr) 基线条件 return arr pivot = arr[len(arr) // 2] left = [x for x in arr...
快速排序是一种高效的排序算法,采用了分治策略来把一个序列分为较小和较大的两个子序列,然后递归地排序两个子序列。快速排序的核心在于如何选择“基准”值,并根据这个基准值将序列分为两部分。在这个例子中,快速...
此项目提供了一个简单的Python版本快速排序算法。快速排序是一种高效的排序算法,其平均时间复杂度为O(n log n)。 ## 如何使用 1. 打开终端或命令提示符。 2. 将代码下载到本地。 3. 导航到代码文件夹,例如: ```...
1. **排序算法**:如快速排序(quicksort)、归并排序(mergesort)、插入排序(insertionsort)、选择排序(selectionsort)以及堆排序(heapsort)。它们用于对数据进行有序排列,理解每种算法的时间复杂度和适用...
通过实践,你可以创建复杂的程序,解决实际问题,例如快速排序算法的实现: ```python def quicksort(arr): if len(arr) return arr pivot = arr[len(arr) // 2] left = [x for x in arr if x ] middle = [x ...
实验报告三 - Python基础编程 本实验主要涵盖了Python的基础编程技巧,旨在让学生熟悉Python的编程模式和开发方法,为后续的...这为他们进一步学习Python编程,特别是涉及到并行计算的复杂任务打下了坚实的基础。
- 文件中给出了一个使用Python实现的经典快速排序算法示例(quicksort)。这不仅展示了Python简洁的语法,也体现了其强大的表达能力。 8. Python和深度学习的关系: - CS231n课程聚焦于深度学习在计算机视觉中的...
- **排序算法**:如冒泡排序、插入排序、选择排序、快速排序、归并排序、堆排序等。 - **搜索算法**:如线性搜索、二分搜索、深度优先搜索(DFS)、广度优先搜索(BFS)。 - **图算法**:如最短路径算法(Dijkstra、...