氣泡排序與選擇排序

2021-10-05 03:57:52 字數 2087 閱讀 4028

對於乙個長度為n的列表來說,需要進行n-1趟的比較,第一趟需要比較n-1次,把最大的數排到列表的末端。第二趟需要比較n-2次,把第二大的數放到列表的倒數第二個位置。以此類推。

def

bubblesort

(tarlist)

:for passnum in

range

(len

(tarlist)-1

,0,-

1):for i in

range

(passnum)

:if tarlist[i]

>tarlist[i+1]

: tarlist[i]

,tarlist[i+1]

=tarlist[i+1]

,tarlist[i]

#這是python中特有的互換值的方法。

這種方法比較的次數是n的平方級別的。

氣泡排序是比較差的方法,主要是要經過多次無效的對比和交換,它的好處就是不需要額外的儲存空間的開銷。

效能改進:我們可以對每趟進行監測,如果某趟對比中沒有發生任何交換,說明列表中已經不再存在逆序,排序也就可以提前結束了。

def

bubblesort

(tarlist)

: passnum=

len(tarlist)-1

exchange=

true

while passnum>

0and exchange:

exchange=

false

for i in

range

(passnum)

:if tarlist[i]

>tarlist[i+1]

: tarlist[i]

, tarlist[i +1]

= tarlist[i +1]

, tarlist[i]

exchange=

true

passnum-=

1

交換排序:選擇排序對氣泡排序進行的改進,保留了多趟對比的思路,每項都使當前最大項就位,但是選擇排序對交換進行了削減,,每趟僅進行一次交換,記錄最大項的所在位置,再跟本趟最大項進行交換。特別注意的是,每次比較一定要拿第乙個往後比較,下面的兩個程式,第乙個maxpos放在了迴圈之前,這就不可以,可能會拿前面n-1個數和第n個最大數比較大小,導致最大值得位置從來不更新``

def

selectsort

(alist)

: num=

len(alist)-1

maxpos=

0for passnum in

range

(num,0,

-1):

for i in

range(1

,passnum+1)

:if alist[i]

> alist[maxpos]

: maxpos=i

alist[passnum]

,alist[maxpos]

=alist[maxpos]

,alist[passnum]

def

selectsort

(alist)

: num=

len(alist)-1

for passnum in

range

(num,0,

-1):

maxpos=

0#每次迴圈都拿0和後面的數進行比較

for i in

range(1

,passnum+1)

:if alist[i]

> alist[maxpos]

: maxpos=i

alist[passnum]

,alist[maxpos]

=alist[maxpos]

,alist[passnum]

排序 氣泡排序與選擇排序

最近複習大學學過的演算法,這裡做個筆記。排序,我們學過 這裡需要了解什麼是時間複雜度,什麼是空間複雜度。簡單而言,時間複雜度指執行的次數,空間複雜度指消耗的記憶體。它重複地走訪過要排序的元素列,依次比較兩個相鄰的元素,如果順序 如從大到小 首字母從z到a 錯誤就把他們交換過來。走訪元素的工作是重複地...

選擇排序與氣泡排序

今早心血來潮,又想看看氣泡排序.於是乎度娘一番,找到了度娘給我的這篇文章,前面的文字描述還是簡單易懂的,可惜給出的 示範有些文不對題.於是乎又wiki一番.發現上文給出的 形似選擇排序,於是總結如下 我們假設有乙個陣列 624159 對應的索引也就是 0 5,如果我想描述第二個位置,也就是數字2的位...

選擇排序與氣泡排序

選擇排序 static void sort1 int arr var temp arr i arr i arr min arr min temp 氣泡排序 static void sort2 int arr static void main string args sort1 arr foreach...