標籤:
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 + 126 27 high_ind = high - 228 29 while low_ind <= high_ind:30 while array[low_ind] < pivot:31 low_ind+=132 33 while array[high_ind] > pivot:34 high_ind-=135 36 if low_ind < high_ind:37 exchange(low_ind,high_ind,array)38 39 low_ind+=140 high_ind-=141 else:42 break43 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 element50 def exchange(index1, index2, array):51 temp = array[index1]52 array[index1] = array[index2]53 array[index2] = temp54 55 #insertion sort56 def insertsort(low,high,array):57 if low < 0 or high >= len(array):58 return59 60 outer = low + 161 62 while (outer<=high):63 inner = low64 while (inner<outer):65 if array[outer]<array[inner]:66 array.insert(inner,array[outer])67 del array[outer+1]68 break69 inner+=170 outer+=171 72 #test73 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不久,兩行代碼都研究了好久。
Quicksort in Python