標籤:on() tar 參考 lis ret 冒泡 imp font class
冒泡排序的過程是首先將第一個記錄的關鍵字和第二個記錄的關鍵字進行比較,若為逆序,則將兩個記錄交換,然後比較第二個記錄和第三個記錄的關鍵字。以此類推,直至第n-1個記錄和第n個記錄的關鍵字進行過比較為止。上述過程稱為第一趟冒泡排序,接著第二趟對前面n-1個關鍵字進行同樣操作,……
快速排序是對冒泡排序的一種改進,通過一趟排序將記錄分割成獨立的兩部分,其中一部分記錄的關鍵字均比另一部分關鍵字小,可分別對這兩部分記錄以遞迴的方法繼續進行排序,以達到整個序列有序。
單趟Partition()函數過程請看下面動圖:
用Python進行實現:
#coding=utf-8import timea=[49,38,65,97,76,13,27,49]b=[-1,49,38,65,97,76,13,27,49] #其中b[0]=-1這一位置是暫存單元,用於存放下面演算法中的list[low]#冒泡排序-------------------------------------------------------def BubbleSort(list): for i in reversed(range(len(a))): for j in range(0,len(a)-1): if(list[j] > list[j+1]): temp=list[j] list[j]=list[j+1] list[j+1]=temp j+=1 i-=1#快速排序-------------------------------------------------------def Partition(list,low,high): pivotkey=list[low] #樞軸 list[0]=list[low] while low<high: #從表的兩端交替地向中間掃描 while(low<high and list[high]>=pivotkey): high-=1 list[low]=list[high] #將比樞軸記錄小的移到低端 while(low<high and list[low]<=pivotkey): low+=1 list[high]=list[low] #將比樞軸記錄大的移到高端 list[low]=list[0] #樞軸記錄到位 return low #返回樞軸位置def Qsort(list,low,high): if low<high: pivotloc=Partition(list,low,high); #將list一分為二 Qsort(list,low,pivotloc-1) #對低子表遞迴排序 Qsort(list,pivotloc+1,high) #對高子表遞迴排序def QuickSort(list): Qsort(list,1,len(list)-1)#---------------------------------------------------------------start_time=time.time()BubbleSort(a)QuickSort(b)use_time=time.time()-start_timeprint ‘Time used: ‘+str(use_time)print aprint b[1:]
參考書目:《資料結構:C語言版》, 嚴蔚敏,吳偉民編著, 清華大學出版社
快速排序演算法回顧 --冒泡排序Bubble Sort和快速排序Quick Sort(Python實現)