Quicksort in Python

 1 #quick sort
 2 def quicksort(low, high, array):
    limit = 10
3 if low < 0 or high >= len(array): 4 return 5 6 if (high-low)<limit: 7 insertsort(low,high,array) 8 return 9 10 middle = (low+high)/2 11 12 if array[low] > array[middle]: 13 exchange(low,middle,array) 14 15 if array[middle]>array[high]: 16 exchange(middle,high,array) 17 18 if array[low]>array[high]: 19 exchange(low,high,array) 20 21 pivot = array[middle] 22 23 exchange(middle,high-1,array) 24 25 low_ind = low + 1 26 27 high_ind = high - 2 28 29 while low_ind <= high_ind: 30 while array[low_ind] < pivot: 31 low_ind+=1 32 33 while array[high_ind] > pivot: 34 high_ind-=1 35 36 if low_ind < high_ind: 37 exchange(low_ind,high_ind,array) 38 39 low_ind+=1 40 high_ind-=1 41 else: 42 break 43 44 exchange(low_ind,high-1,array) 45 46 quicksort(low,low_ind-1,array) 47 quicksort(low_ind+1,high,array) 48 49 #exchange two element 50 def exchange(index1, index2, array): 51 temp = array[index1] 52 array[index1] = array[index2] 53 array[index2] = temp 54 55 #insertion sort 56 def insertsort(low,high,array): 57 if low < 0 or high >= len(array): 58 return 59 60 outer = low + 1 61 62 while (outer<=high): 63 inner = low 64 while (inner<outer): 65 if array[outer]<array[inner]: 66 array.insert(inner,array[outer]) 67 del array[outer+1] 68 break 69 inner+=1 70 outer+=1 71 72 #test 73 array=[] 74 75 quicksort(0,len(array)-1,array) 76 77 print array

第一篇随笔, 就用来写一下快排吧,毕竟各种面试都会问到的。

我这边采用了三数中值法 来取pivot, 然后在待排序元素小于limit(这里设为10)的时候, 换用插入排序。

第一次发博文,自勉之

 

后记:

   发完不就 就看到一篇博文http://www.cnblogs.com/figure9/archive/2010/12/10/1902711.html 研究最短用几行代码可以写完快排.

转载部分代码如下:

1 def q_sort(l):
2     return l if len(l)<=1 else q_sort([x for x in l[1:] if x<l[0]])+[l[0]]+q_sort([x for x in l[1:] if x>=l[0]])

这边没有考虑pivot的选取,永远选第一个作为pivot,因此有可能退化为最差情形.不过这么少的代码就写完了 还是很强大,初学python不久,两行代码都研究了好久。

posted on 2015-03-18 09:31  刀疤2  阅读(273)  评论(0编辑  收藏  举报

导航