Algorithms: Design and Analysis, Part 1 第一章講的是分治算法,即DC,這一章講的是快速排序QuickSort。作業難度已經增加了,Problem Sets做了兩次一不小心只得了四分,編程作業也作了兩次才作對。 這次作業是實現快速排序,並改變哨兵元素的選擇方法比較性能。哨兵可以選擇為第一個、最後一個元素,也可以選取首、尾、中間三個元素第二大的數字。 最後一種方法實現時可以借用list的排序方法。 代碼如下:
def quickSort(arrayall): if len(arrayall)<=1:return arrayall,0 #sel p #p=0 #p=len(arrayall)-1 p=(len(arrayall)-1)/2 a=[(arrayall[0],0),(arrayall[p],p),(arrayall[-1],len(arrayall)-1)] a.sort() tmp,p=a[1] if p!=0: arrayall[0],arrayall[p]=arrayall[p],arrayall[0] indi=1 for indj in range(1,len(arrayall)): if arrayall[indj]<arrayall[0]: arrayall[indi],arrayall[indj]=arrayall[indj],arrayall[indi] indi+=1 arrayall[0],arrayall[indi-1]=arrayall[indi-1],arrayall[0] arrayallp,mp=quickSort(arrayall[:indi-1]) arrayallq,mq=quickSort(arrayall[indi:]) return arrayallp+[arrayall[indi-1]]+arrayallq,mp+mq+len(arrayall)-1 f=open('QuickSort.txt','r') listall=f.read() listall=[int(x) for x in listall.split()] f.close() sortedlist,m=quickSort(listall) print m def quickSort(arrayall): if len(arrayall)<=1:return arrayall,0 #sel p #p=0 #p=len(arrayall)-1 p=(len(arrayall)-1)/2 a=[(arrayall[0],0),(arrayall[p],p),(arrayall[-1],len(arrayall)-1)] a.sort() tmp,p=a[1] if p!=0: arrayall[0],arrayall[p]=arrayall[p],arrayall[0] indi=1 for indj in range(1,len(arrayall)): if arrayall[indj]<arrayall[0]: arrayall[indi],arrayall[indj]=arrayall[indj],arrayall[indi] indi+=1 arrayall[0],arrayall[indi-1]=arrayall[indi-1],arrayall[0] arrayallp,mp=quickSort(arrayall[:indi-1]) arrayallq,mq=quickSort(arrayall[indi:]) return arrayallp+[arrayall[indi-1]]+arrayallq,mp+mq+len(arrayall)-1 f=open('QuickSort.txt','r') listall=f.read() listall=[int(x) for x in listall.split()] f.close() sortedlist,m=quickSort(listall) print m
當然實驗結果是最後一種方法性能比較優越。 分享到: 上一篇:Coding the Matrix作業Python Lab及提交方法