三大經典排序 氣泡排序,選擇排序,快速排序

2021-10-04 07:11:13 字數 2627 閱讀 3793

1.氣泡排序

氣泡排序(bubble sort) 最為簡單的一種排序,通過重複走完陣列的所有元素,通過打擂台的方式兩個兩個比較,直到沒有數可以交換的時候結束這個數,再到下個數,直到整個陣列排好順序。因乙個個浮出所以叫氣泡排序。雙重迴圈時間 o(n^2)

演算法描述:

比較相鄰兩個資料如果。第乙個比第二個大,就交換兩個數

對每乙個相鄰的數做同樣1的工作,這樣從開始一隊到結尾一隊在最後的數就是最大的數。

針對所有元素上面的操作,除了最後乙個。

重複1~3步驟,知道順序完成。

def bubble_sort(arr):

if not arr or len(arr)<=0:

return

for i in range(0, len(arr)-1):

for j in range(i+1, len(arr)):

if arr[i] > arr[j]:

temp = arr[i]

arr[i] = arr[j]

arr[j] = temp

return arr

def bubble_sort(arr):

if not arr or len(arr)<=0:

return

for i in range(0, len(arr)):

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

if arr[j] > arr[j+1]:

temp = arr[j]

arr[j] = arr[j+1]

arr[j+1] = temp

return arr

2.選擇排序

選擇排序(select sort) 是直觀的排序,通過確定乙個 key 最大或最小值,再從帶排序的的數中找出最大或最小的交換到對應位置。再選擇次之。雙重迴圈時間複雜度為 o(n^2)

演算法描述:

在乙個長度為 n 的無序陣列中,第一次遍歷 n-1 個數找到最小的和第乙個數交換。

第二次從下乙個數開始遍歷 n-2 個數,找到最小的數和第二個數交換。

重複以上操作直到第 n-1 次遍歷最小的數和第 n-1 個數交換,排序完成。

def select_sort(arr):

if not arr or len(arr)<=0:

return

for i in range(0, len(arr)):

minkey = arr[i]

for j in range(i+1, len(arr)):

if minkey > arr[j]:

temp = arr[j]

arr[j] = minkey

minkey = temp

arr[i] = minkey

return arr

3.快速排序

快速排序(quicksort)是排除穩定性因素後最常用的排序。給看官介紹兩種使用方法,一種值直接在我檔案 stdlib.h 標頭檔案中的 qsort 函式實現是和正常寫**一樣的。通過使用qsort(陣列名,長度,sizeof(第乙個數長度),compinc/comodec) 進行實現陣列的排序。後面的是通過遞迴呼叫的形式。

演算法描述:

從數列中挑出乙個元素作為基準。

重新排列數列,把所有的比基準小的放在基準前面,反之放在後面(一樣大可任意一邊)完成後基準處在分割槽的中間位置。

通過遞迴呼叫把小於基準元素和大雨基準元素的子串行進行排序。

def get_index(arr, low, high):

# 獲取基準資料,即最左邊的資料

base = arr[low]

while low=base:

high -= 1

# 跳出迴圈說明arr[high]元素小於base了,需要將其賦值給low

arr[low] = arr[high]

# 當隊首元素小於等於base時,向前挪動low指標

while lowlow += 1

# 當隊首元素大於base時,需要將其賦值給high

arr[high] = arr[low]

# 跳出迴圈時low和high相等,此時的low或high就是base的正確索引位置

# 由原理部分可以很清楚的知道low位置的值並不是base,所以需要將base賦值給arr[low]

arr[low] = base

return low # 返回arr的正確位置

def quick_sort(arr, low, high):

if low < high:

# 找尋基準資料的正確索引

index = get_index(arr, low, high)

# 進行迭代對index之前和之後的陣列進行相同的操作使整個陣列變成有序

quick_sort(arr, 0, index - 1)

quick_sort(arr, index + 1, high)

return arr

十大經典排序演算法 氣泡排序

一 演算法複雜度 二 演算法流程 1 遍歷每個資料,對每個資料和其後的資料進行比較,如果第乙個較大進行交換,相當於把最大值放到最後 2 每次排序會去除掉最後乙個最大的值,再將前面部分進行排序一次 三 實現 def swap arr,i,j tmp arr i arr i arr j arr j tm...

十大經典排序之氣泡排序

氣泡排序 氣泡排序 bubble sort 是一種電腦科學領域的較簡單的排序演算法。它重複地走訪過要排序的元素列,依次比較兩個相鄰的元素,如果他們的順序 如從大到小 首字母從a到z 錯誤就把他們交換過來。走訪元素的工作是重複地進行直到沒有相鄰元素需要交換,也就是說該元素列已經排序完成。這個演算法的名...

十大經典排序演算法 氣泡排序

氣泡排序 bubble sort 也是一種簡單直觀的排序演算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越小的元素會經由交換慢慢 浮 到數列的頂端。usr b...