排序的幾種方法回顧

2021-09-19 08:46:56 字數 2525 閱讀 7200

氣泡排序

氣泡排序: 是一種交換排序。 兩兩比較待排序元素,發現2個元素次序相反則進行交換,直到沒有反序的元素為止。 

氣泡排序:通過無序區中相鄰記錄的關鍵字間的比較和位置的交換,使關鍵字最小的元素如氣泡似的逐步上浮直水面。有序區逐漸擴大,無序區逐漸縮小。 

lists = [1, 9, 3, 5, 2, 0, 8, 7, 6, 4]

lenth = len(lists)

for i in range(lenth):

inner_lenth = lenth - i

for j in range(inner_lenth-1):

first = lists[j]

next = lists[j + 1]

if first > next:

lists[j], lists[j + 1] = lists[j + 1], lists[j]

print(lists)

插入排序

插入排序是一種理想排序,假設序列開頭的數字有序,然後將後面的數字按順序插入 到序列當中。

它把乙個無序數列看成兩個數列,假如第乙個元素構成了第乙個數列,那麼餘下的元素構成了第二個數列,很顯然,第乙個數列是有序的(因為只有乙個元素嘛,肯定有序哦),那麼我們把第二個數列的第乙個元素拿出來插入到第乙個數列,使它依然構成乙個有序數列,直到第二個數列中的所有元素全部插入到第乙個數列,這時候就排好序了。

插入排序

lists = [8, 3, 6, 5, 9, 2, 0, 4, 7, 1]

lenth = len(lists)

for i in range(lenth):

while i > 0 and lists[i - 1] > lists[i]:

# i > 0 目的 結束while迴圈 限制迴圈次數

# i 》 0 從第二個個元素開始比較

lists[i - 1], lists[i] = lists[i], lists[i - 1]

i -= 1

print(lists)

選擇排序

1、選擇最小的值

2、遍歷其他的值,如果小於最小值,和最小值互換位置

lists = [8, 3, 6, 5, 9, 2, 0, 4, 7, 1]

lenth = len(lists)

for i in range(lenth):

for j in range(i + 1, lenth):

outer_num = lists[i]

inner_num = lists[j]

if inner_num < outer_num: # > < 決定排序的方式 正序還是倒序

lists[i], lists[j] = lists[j], lists[i]

print(lists)

print(lists)

快速排序

快速排序的思路是依據乙個中值資料項來把資料表分為兩半:小於中值的一半和大於中值的一半,然後每部分分別進行快速排序

基本結束條件:資料表僅有乙個資料項,自然是排好序的。

縮小規模:根據中值,將資料表分為兩半,最好情況是相等規模的兩半

呼叫自身:將兩半分別呼叫自身進行排序

**資料表的目標:找到「中值」應處的位置

分為左和右兩邊同時進行排序

①設定左右標,左標向右移動,右標向左移動,

②左標一直向右移動,碰到比中值大的就停止,右標一直向左移動,碰到比中值小的就停止,然後把左右標所指的資料項交換

③繼續前述的移動過程,直到左標移到右標的右側,停止移動,這時右標所指的位置就是中值應處的位置,將中值和這個位置交換,**完成,左半部全比中值小,右半部都比中值大。

def quick_sort(lists, start, end):

if start >= end:

return

mid = lists[start]

low = start

high = end

while low < high:

while low < high and lists[high] >= mid:

high -= 1

lists[low] = lists[high]

while low < high and lists[low] < mid:

low += 1

lists[high] = lists[low]

lists[low] = mid

quick_sort(lists, start, low - 1) # 左邊

quick_sort(lists, low + 1, end) # 右邊

lists = [8, 3, 6, 5, 9, 2, 0, 4, 7, 1]

quick_sort(lists, 0, len(lists) - 1)

print(lists)

排序的幾種方法

三種排序 選擇排序,氣泡排序,插入排序 的總結 1.選擇排序 1 public class demo3 遍歷排序前的數值 for int i 0 i num.length 1 i 如果最小值的標號未改變,代表本身已是最小值,否則交換數值 if min i 遍歷排序後的數值 for int i 0 i...

排序的幾種方法

三種排序 選擇排序,氣泡排序,插入排序 的總結 1.選擇排序 1 public class demo3 遍歷排序前的數值 for int i 0 i num.length 1 i 如果最小值的標號未改變,代表本身已是最小值,否則交換數值 if min i 遍歷排序後的數值 for int i 0 i...

陣列排序的幾種方法

演算法步驟 比較相鄰的元素。如果第乙個比第二個大,就交換他們兩個。對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。這步做完後,最後的元素會是最大的數。針對所有的元素重複以上的步驟,除了最後乙個。持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。氣泡排序 functio...