标签:
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不久,两行代码都研究了好久。
标签:
原文地址:http://www.cnblogs.com/jerrylu/p/4346296.html