排序演算法詳解(一)

2021-10-02 09:16:52 字數 3146 閱讀 5448

排序演算法(英語:sorting algorithm)是一種能將一串資料依照特定順序進行排列的一種演算法。

穩定性:穩定排序演算法會讓原本有相等鍵值的紀錄維持相對次序。也就是如果乙個排序演算法是穩定的,當有兩個相等鍵值的紀錄r和s,且在原本的列表中r出現在s之前,在排序過的列表中r也將會是在s之前。

當相等的元素是無法分辨的,比如像是整數,穩定性並不是乙個問題。然而,假設以下的數對將要以他們的第乙個數字來排序。

在這個狀況下,有可能產生兩種不同的結果,乙個是讓相等鍵值的紀錄維持相對的次序,而另外乙個則沒有:

不穩定排序演算法可能會在相等的鍵值中改變紀錄的相對次序,但是穩定排序演算法從來不會如此。不穩定排序演算法可以被特別地實現為穩定。作這件事情的乙個方式是人工擴充鍵值的比較,如此在其他方面相同鍵值的兩個物件間之比較,(比如上面的比較中加入第二個標準:第二個鍵值的大小)就會被決定使用在原先資料次序中的條目,當作乙個同分決賽。然而,要記住這種次序通常牽涉到額外的空間負擔。

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

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

def

bubbule_sort

(alist)

: n =

len(alist)

for j in

range

(n-1):

for i in

range(0

,n-1

-j):

if alist[i]

>alist[i+1]

: alist[i]

,alist[i+1]

= alist[i+1]

,alist[i]

遍歷一次發現沒有任何可以交換的元素,排序結束。

def

bubbule_sort

(alist)

: n =

len(alist)

for j in

range

(n-1):

count =

0for i in

range(0

,n-1

-j):

if alist[i]

>alist[i+1]

: alist[i]

,alist[i+1]

= alist[i+1]

,alist[i]

count +=1if

0== count:

return

選擇排序(selection sort)是一種簡單直觀的排序演算法。它的工作原理如下。首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然後,再從剩餘未排序元素中繼續尋找最小(大)元素,然後放到已排序序列的未尾。以此類推,直到所有元素均排序完畢。

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

def

select_sort

(alist)

: n =

len(alist)

for j in

range

(n-1):

min_index = j

for i in

range

(j+1

,n):

if alist[min_index]

>alist[i]

: min_index = i

alist[j]

,alist[min_index]

= alist[min_index]

,alist[j]

插入排序(英語:insertion sort)是一種簡單直觀的排序演算法。它的工作原理是通過構建有序序列,對於未排序資料,在已排序序列中從後向前掃瞄,找到相應位置並插入。插入排序在實現上,在從後向前掃瞄過程中,需要反覆把已排序元素逐步向後挪位,為最新元素提供插入空間。

1右邊取出的元素比左邊第乙個·需要比較的值大,則不再進行內層迴圈

def

insert_sort

(alist)

: n =

len(alist)

for j in

range(1

,n):

i = j

while i >0:

if alist[i]

< alist[i-1]

: alist[i]

,alist[i-1]

= alist[i-1]

,alist[i]

i -=

1else

:break

排序演算法詳解(一)

基本原理 氣泡排序是一種簡單的排序演算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果它們的順序錯誤就把它們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越大的元素會經由交換慢慢 浮 到數列的末尾 1.1 演算法描述 比較相鄰的元...

排序演算法詳解

直接插入 二分插入 希爾排序 氣泡排序 快排 簡單選擇 堆排序 歸併排序 基數排序 總結 一 穩定性 穩定 氣泡排序 插入排序 歸併排序和基數排序 不穩定 選擇排序 快速排序 希爾排序 堆排序 二 平均時間複雜度 o n 2 直接插入排序,簡單選擇排序,氣泡排序。在資料規模較小時 9w內 直接插入排...

排序演算法詳解

排序演算法可以分為內部排序和外部排序,內部排序是資料記錄在記憶體中進行排序,而外部排序是因為排序的資料很大,一次不能容納全部的排序記錄,在排序過程中需要訪問外存.常見的內部排序演算法有 氣泡排序 選擇排序 插入排序 希爾排序 歸併排序 快速排序 堆排序等.介紹氣泡排序是一種簡單的排序演算法,這個演算...