python 排序算法
冒泡排序
算法思想:
1、相鄰元素對(duì)比,如果前面元素比后面的大,進(jìn)行交換,直至最后一個(gè)元素,一輪結(jié)束之后,最后一個(gè)元素為最大值;
2、后一輪進(jìn)行的列表數(shù)量比前一輪少一個(gè);
3、反復(fù)進(jìn)行上面兩步,直至沒(méi)有元素進(jìn)行對(duì)比為止.
復(fù)雜度:
冒泡排序的平均復(fù)雜度為O(n2),當(dāng)原列表為正序排列時(shí),復(fù)雜度為O(n),為倒序排列時(shí),復(fù)雜度為O(n2),比較次數(shù)為n*(n-1)/2,關(guān)鍵字移動(dòng)次數(shù)為n*(n-1)/4
穩(wěn)定性:
穩(wěn)定。列表中每次交換是相鄰元素之間的交換,如果相鄰的兩個(gè)元素相等,不會(huì)出現(xiàn)交換情況,因而相同元素的前后順序沒(méi)有發(fā)生改變,故而冒泡排序?yàn)榉€(wěn)定排序算法
代碼:
--------------------------------------------------------------------注:如果你對(duì)python感興趣,我這有個(gè)學(xué)習(xí)Python基地,里面有很多學(xué)習(xí)資料,感興趣的+Q群:895817687--------------------------------------------------------------------def bubble_sort(array):for i in range(len(array) - 1): # 這個(gè)循環(huán)負(fù)責(zé)設(shè)置冒泡排序進(jìn)行的次數(shù)for j in range(len(array) - i - 1): if array[j] > array[j + 1]:array[j], array[j + 1] = array[j + 1], array[j] #交換return nums選擇排序
算法思想:
1、初始狀態(tài)中有序序列為空,無(wú)序序列為列表長(zhǎng)度;
2、將第一個(gè)元素與其余元素對(duì)比,如果第一個(gè)元素大于第二個(gè)元素,將min下標(biāo)替換為第二個(gè)元素,依此類(lèi)推,獲取最小元素的下標(biāo),與i替換;
3、此時(shí)有序序列為1,無(wú)序序列列表長(zhǎng)度-1;
4、將剩余的無(wú)序序列反復(fù)進(jìn)行第二步,直至無(wú)序序列為1;
復(fù)雜度:
選擇排序的平均復(fù)雜度為O(n2)。每進(jìn)行一輪操作,最多交換一次,因此交換操作介于0與n-1之間,比較操作次數(shù)為n*(n-1)/2
穩(wěn)定性:
不穩(wěn)定。一個(gè)list,如果第一個(gè)元素與第四個(gè)元素相同,進(jìn)行比較時(shí),最小元素在第四個(gè)元素之后,第一個(gè)元素與最小元素交換,此時(shí)兩個(gè)相等的元素已經(jīng)失去原有的前后順序,故不穩(wěn)定。比如列表[3,9,7,3,4,1,2],為了方便理解,在列表后面添加對(duì)應(yīng)的下標(biāo)[3(0),9(1),7(2),3(3),4(4),1(5),2(6)],列表無(wú)序,將第一個(gè)元素與其他元素做對(duì)比,發(fā)現(xiàn)元素值為1,下標(biāo)為5為最小值,因此將3(0)與1(5)進(jìn)行交換,得到的序列結(jié)果為[1(5),9(1),7(2),3(3),4(4),3(0),2(6)],由此可見(jiàn),兩個(gè)相同的元素3,順序發(fā)生了改變,故而不穩(wěn)定。
代碼:
def selection_sort(list2):for i in range(0, len (list2)-1):min_ = ifor j in range(i + 1, len(list2)):if list2[j] < list2[min_]:min_ = jlist2[i], list2[min_] = list2[min_], list2[i] # swap總結(jié)
以上是生活随笔為你收集整理的python 排序算法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: python中将已有链接的视频进行下载
- 下一篇: 用Python递归做个多层次的文件执行