Algorithm: quick sort implemented in python 算法导论 快速排序

 1 import random
 2
 3 def partition(A, lo, hi):
 4     pivot_index = random.randint(lo, hi)
 5     pivot = A[pivot_index]
 6     A[pivot_index], A[hi] = A[hi], A[pivot_index]
 7     store_index = lo
 8     for i in range(lo, hi):
 9         if A[i] < pivot:
10             A[i], A[store_index] = A[store_index], A[i]
11             store_index = store_index + 1
12     A[store_index], A[hi] = A[hi], A[store_index]
13     return store_index
14
15 def quicksort(A, lo, hi):
16     if lo < hi:
17         p = partition(A, lo, hi)
18         quicksort(A, lo, p - 1)
19         quicksort(A, p + 1, hi)
20
21 if __name__ == ‘__main__‘:
22     l = [random.randint(1, 113) for i in range(18)]
23     print l
24     quicksort(l, 0, len(l) - 1)
25     print l
时间: 2024-10-10 16:09:12

Algorithm: quick sort implemented in python 算法导论 快速排序的相关文章

algorithm: heap sort in python 算法导论 堆排序

An Python implementation of heap-sort based on the detailed algorithm description in Introduction to Algorithms Third Edition import random def max_heapify(arr, i, length): while True: l, r = i * 2 + 1, i * 2 + 2 largest = l if l < length and arr[l]

算法导论-快速排序

一.快速排序的描述 快速排序是基于分治策略的.对一个子数组A[p…r]快速排序的分治过程的三个步骤为: 1.分解 数组A[p…r]被划分成两个(可能空)子数组A[p…q-1]和A[q+1…r],使得A[p…q-1]中的每个元素都小于等于A[q],且小于等于A[q+1…r]中的元素.下标q也在这个划分过程中进行计算. 2.解决 通过递归调用快速排序,对子数组A[p…q-1]和A[q+1…r]排序. 3.合并 因为两个字数组就是原地排序的,将它们的合并不需要操作:整个数组A[p…r]已排序. 快速排

Python算法之快速排序

算法思想:快速排序运用了分而治之的思想,即在所选数组中选择一个基准(任选一个都可以),以改基准为基础,将小于该基准的元素都移动基准的左边,大于该基准的数据都移动到右边,然后对左右两边进行递归处理.同样也是按照上述方法,即:选基准,在递归. 算法实例:Arr=[10,5,2,3,4,7,6] --->  [2, 3, 4, 5, 6, 7, 10] 代码如下: 上述代码有几处可以简化为如下 : greater,less = [],[]   for i in arr[1:]:            

[算法导论]quicksort algorithm @ Python

算法导论上面快速排序的实现. 代码: def partition(array, left, right): i = left-1 for j in range(left, right): if array[j] <= array[right]: i += 1 array[j], array[i] = array[i], array[j] array[i+1], array[right] = array[right], array[i+1] return i+1 def quicksort(arr

Collection of algorithm for sorting. 常见排序算法集(三) —— Quick Sort

Quick Sort 快排,一个排序方法能直接享受这样的名称殊荣,呵呵,可见其威力与重要性. 其中最重要的思想就是 "分治"-- divide and conquer ! 这里排序用到的思想极其简单,却是很实用的!小孩子都会的简单想法. 先把所有数据分成三个部分. 在所有数据中选取某一元素X,比X小的放左边,比X大的放右边. 接着把这一思想同样分别施加在X元素的左边和右边部分,同样继续划分,选出一个元素X' 比X'小的放左边比X'大的放右边. 继续施加这种划分策略,直到划分的元素很少(

[Algorithm] 如何正确撸&lt;算法导论&gt;CLRS

其实算法本身不难,第一遍可以只看伪代码和算法思路.如果想进一步理解的话,第三章那些标记法是非常重要的,就算要花费大量时间才能理解,也不要马马虎虎略过.因为以后的每一章,讲完算法就是这样的分析,精通的话,很快就读完了.你所说的证明和推导大概也都是在第三章介绍了,可以回过头再认真看几遍. 至于课后题,比较难,我只做了前几章,如果要做完需要更多时间和精力.这可以通过之后做算法题来弥补,可以去leetcode等网站找一些经典的算法题做一做,加深理解. Facebook的工程师写的攻略,介绍了用算法导论来

算法导论之所有排序算法的Python实现

最近一段时间学习了算法导论第二版书的第一部分和第二部分的内容,自己编写了其中排序相关的几乎全部算法,包括冒泡排序(bubble sort).选择排序( selection sort).插入排序(insertion sort).希尔排序(shell sort).归并排序(merge sort).快速排序(quick sort).计数排序(count sort).基数排序(radix sort).桶排序(bucket sort).期望线性时间的第k个顺序统计量选择.最坏情况线性时间的中位数选择,并给

基本数据结构(算法导论)与python

原文链接 Stack, Queue Stack是后进先出, LIFO, 队列为先进先出, FIFO在Python中两者, 都可以简单的用list实现,进, 用append()出, Stack用pop(), Queue用pop(0), pop的时候注意判断len(l) 对于优先队列, 要用到前面讲到的堆 链表和多重数组 这些数据结构在python中就没有存在的价值, 用list都能轻松实现 散列表 为了满足实时查询的需求而产生的数据结构, 查询复杂度的期望是O(1), 最差为O(n)问题描述, 对

笔试算法题(54):快速排序实现之单向扫描、双向扫描(single-direction scanning, bidirectional scanning of Quick Sort)

议题:快速排序实现之一(单向遍历) 分析: 算法原理:主要由两部分组成,一部分是递归部分QuickSort,它将调用partition进行划分,并取得划分元素P,然后分别对P之前的部分和P 之后的部分递归调用QuickSort:另一部分是partition,选取划分元素P(随机选取数组中的一个元素,交换到数组末尾位置),定义两个标记 值left和right,随着划分的进行,这两个标记值将数组分成三部分,left之左的部分是小于划分元素P的值,left和right之间的部分是大 于等于划分元素P的