常見的演算法排序之交換類排序

2022-09-15 11:27:10 字數 1865 閱讀 8152

1.快速排序

基本實現方法:經過一次排序演算法之後,先簡單的將資料分為兩部分,取乙個中間數(一般為第乙個元素)以這個中間數為中心,左邊的數為比這個數小的數,右邊的數為比這個數大的數。

之後再進行遞迴演算法,分別處理已經分好的以中間數為分界的左右兩堆資料。直到找到我們想要的排好序的陣列。

基本方法步驟:1.先確定乙個對比數為中間數,(一般為第乙個元素)

2.取兩個變數i、j,i為下標的數字為這個陣列的第乙個元素,j為下標的數字為這個陣列的最後乙個元素。

3.首先從後向前進行比較,即最後乙個元素與中間數進行比較,如果最後乙個元素的值大於第乙個元素,j- -,繼續進行比較,如果j為下標的元素的值小於第乙個元素,將j為下標

元素的值賦給i為下標的元素。結束這一次比較。

4.開始從前往後進行比較,如果第乙個數的值小於中間值,i++,接著進行比較,如果i為下標的元素的值大於中間數,將這個數字的值賦給j為下標的元素。結束這一次比較。

5.重複3和4步驟,直到  i>j。

原理:讓指定的元素歸位,所謂歸位,就是放到它應該放到的位置,(左邊的元素比它小,右邊的元素比它大),然後對每個元素歸為,就完成了排序。

**如下:

#歸位函式

def partition(velue,l,r) #左右分別指向兩端元素

mid=velue[l]: #把左邊第乙個元素賦值給mid,此時l指向空

while l < r : #左右兩個指標不重合就繼續

while l = mid :#r指向的元素大於mid,則不交換

r-=1 #r向左移動一位

velue[l]=velue[r]#如果r指向的元素小於mid,就放在左邊現在為空的位置

while l 氣泡排序

1.原理:重複的走訪過要排序的數列,一次比較兩個元素,如果它們的排序錯誤,就把它們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該序列已經

排序完成。(越小的元素會慢慢「浮」到數列頂端)

2.步驟:

1.比較相鄰的元素,如果第乙個比第二個大,就交換它們兩。

2.對每一對相鄰的元素做同樣的工作,從開始第一對到結尾最後一對。這個步驟結束後,最後的元素會是最大的數。

3.針對所有元素重複以上步驟,除了最後乙個。

4.持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。

3.** 

def bubble_sort(li):

length=len(li) #第一級遍歷

for index in range (length): #第二級遍歷

for j in range(1,length-index):    #j為列表下標

if li[j-1]>li[j]: #交換兩者資料,這裡沒用temp,是因為python特性元素

li[j-1],li[j]=li[j],li[j-1]

return li

優化後的**,新增乙個標誌,在排序完成時,停止排序。

def bubble_sort(li):

length=len(li)

for index in range(length):    #j為列表下標

flag=ture #標誌位

for j in range (1,length-index):

if li[j-1]>li[j]:

li[j-1],li[j]=li[j],li[j-1]

flag=false

if flag: #沒發生交換

return li

return li

排序演算法之交換類排序

交換類排序的思想,顧名思義,就是在每一輪的排序過程,通過不斷的交換來使每個元素到達最終的位置。常見的兩種交換類排序有氣泡排序和快速排序。氣泡排序作為最基礎的排序演算法,它的排序思想也如其名,通過比較兩個相鄰資料的大小,來決定是否交換它們的位置,最後經過多輪排序最終是整個序列有序。網上找到的gif 分...

排序演算法之交換排序

交換排基本思想 兩兩比較待排序元素的關鍵字,發現兩個元素的次序相反時即進行交換,知道沒有反序的元素為止。本節介紹兩種交換排序,即氣泡排序和快速排序。氣泡排序 每次只能和相鄰的位置數進行交換,效率低 include int a 100 void quicksort int left,int right...

排序演算法之交換排序

交換,就是根據序列中兩個元素關鍵字的比較結果來對換這兩個記錄在序列中的位置。基於交換的排序 演算法有很多。以氣泡排序和快速排序舉例。氣泡排序 public static int bubblesort int array return newarray 穩定性 氣泡排序是乙個穩定的排序方法。氣泡排序中...