C 資料結構(氣泡排序,選擇排序)

2022-06-17 08:00:15 字數 1872 閱讀 8570

它重複地遍歷要拍學的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。遍歷數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越小的元素會經由交換慢慢「浮」到數列的頂端。

氣泡排序演算法的運作如下:

#

###第一種方法

defbubble_sort(alist):

for j in range(len(alist)-1,0,-1):

#j表示每次遍歷需要比較的次數,是逐漸減小的

for i in

range(j):

if alist[i] > alist[i+1]:

alist[i], alist[i+1] = alist[i+1], alist[i]

if__name__ == "

__main__":

li = [54,25,93,17,77,31,44,55,20,10]

print

(li)

bublle_sort(li)

print(li)

#

###第二種方法

defbublle_sort(alist):

"""氣泡排序

"""n =len(alist)

for j in range(n - 1):

count =0

for i in range(0, n - 1 -j):

#從頭走到尾

if alist[i] > alist[i + 1]:

alist[i], alist[i + 1] = alist[i + 1], alist[i]

count += 1

if 0 ==count:

#如果沒有進行交換,說明已經排序完成不需要再進行下去

break

if__name__ == "

__main__":

li = [54,25,93,17,77,31,44,55,20,10]

print

(li)

bublle_sort(li)

print(li)

首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然後,再從剩餘未排序元素中繼續尋找最小(大)元素,然後放到已排序序列的末尾。以此類推,直到所有元素均排序完畢。

選擇排序的主要優點與資料移動有關。如果某個元素位於正確的最終位置上,則它不會被移動。選擇排序每次交換一對元素,它們當中至少有乙個將被移到其最終位置上,因此對n個元素的表進行排序總共進行至多n-1次交換。在所有的完全依靠交換去移動元素的排序方法中,選擇排序屬於非常好的一種。

記錄最小值的下標

for i in range(j+1, n-1): #

從i+1這個位置到末尾中選出最小資料

if alist[min_index] >alist[i]:

min_index =i

alist[j], alist[min_index] =alist[min_index],alist[j]

#交換在退出內層迴圈時執行

if__name__ == "

__main__":

li = [3,2,1,7,8,9,75]

print

(li)

select_sort(li)

print(li)

資料結構 PHP 選擇排序 氣泡排序

選擇排序和氣泡排序時間複雜度都屬於o n 2 級別的排序演算法,由於它實現起來比較簡單,在不考慮效能的簡單情景下,可以優先考慮。選擇排序的原理就是每迴圈一次就挑出最小的那個 假設從小到大排 然後記住最小位置的那個索引,把它安排到最前面去,已經排過的位置就往後排,以此類推達到選擇排序的目的 從小到 擇...

資料結構之冒泡 選擇排序

氣泡排序和選擇排序都屬於內部排序,這兩種排序方式的平均時間複雜度和最壞時間複雜度都是 一 氣泡排序 氣泡排序是對待排序序列下標有小到大開始遍歷比較,若這兩個元素逆序,則交換,不逆序則繼續比較一下乙個,比較陣列長度 1趟即可。若是某一趟沒有交換,則證明這個陣列序列有序,退出即可。如下 氣泡排序 每一趟...

C 資料結構 氣泡排序

include typedef int infotype typedef enum boolean define n 5 假設的檔案長度,即待排序的記錄數目 typedef int keytype 假設的關鍵字型別 typedef struct rectype typedef rectype seq...