python3 說簡單也不簡單的排序演算法

2022-08-03 06:39:11 字數 1832 閱讀 4378

在剛開始接觸演算法時,我們可能一臉懵,不知從何處下手,尤其是現在使用的語言五花八門,各種語言的實現又不盡相同,所以,在這種情況下,千萬不能迷失了自己,掌握了演算法的原理,就像解數學公式一樣,定理給你了,仔細想想便可以用**來實現它,前提要養成良好的解題思路.

下面我們來從入門的排序演算法開始:

以下都是針對乙個無序陣列 a = [3,1,5,6,7,2,4,8] 進行排序

初進排序演算法,那就來試一下冒泡吧,原理和暴力列舉法差不多,極盡可能的把所有元素都列舉出來,乙個個對比,做法簡單而又粗暴(很*很暴力).

下面上**:

'''

氣泡排序演算法

'''def bubblesorft(a):

for i in range(len(a)):#第一層迴圈,控制排序的次數

for j in range(len(a)-i):#第二層迴圈,控制前乙個元素與後乙個元素比大小

if j+1 < len(a):

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

temp = a[j+1]

a[j+1] = a[j]

a[j] = temp

return a

a = [3,1,5,6,7,2,4,8]

a = bubblesorft(a)

print(a)

[1, 2, 3, 4, 5, 6, 7, 8]

演算法簡單,清晰明了,如果看不懂,那就自己敲幾遍**,你很快就會悟了,哈哈

這都不算完,接下來上個簡單而又不簡單的歸併排序演算法,你再來悟一下:

說簡單是因為你悟透了,說不簡單是遞迴很繞人,其實想明白了何時return,就想明白了此時遞迴的值.

歸併排序在排序時先將陣列分成兩部分,並分別進行排序,然後再把排好序的兩部分整合成乙個排序陣列.

下面上**感受一下:

'''

歸併排序演算法

'''def mangesorft(a):

if len(a) <= 1:

return a

half = int(len(a) / 2)#把列表分成兩份

first = mangesorft(a[0:half])#使用了遞迴,使得最後分的元素越來越小,直至到乙個元素,然後返回排序好的列表

second = mangesorft(a[half:len(a)])#使用了遞迴,使得最後分的元素越來越小,直至到乙個元素,然後返回排序好的列表

i = 0

j = 0

newa =

while i < len(first) or j < len(second):#控制迴圈次數

if i [1, 2, 3, 4, 5, 6, 7, 8]

對比這兩個演算法,你有啥想法了沒有,如果有,那麼恭喜你,咱們可以一起拉著小手跳入演算法的坑了,

有了這兩個神器,以後遇到演算法問題,對於無序的陣列或列表,那咱就先來排個序吧,這可是解題的第一步,加油!

順帶講兩個列表和陣列去重的小知識(有面試題考過):

a = [1,1,2,2,3,3,4,4,5,5,6,6,7,7]

#普通方法去重

newa =

def deletequemnents(a):

for i in a:

if i in a:

if i not in newa:

return newa

print(deletequemnents(a))

#使用python內建函式set去重

def deletequemn(a):

for i in a:

a = set(a)

return a

print(deletequemn(a))

網線製作也不簡單

網線製作背後更深層的東西 我們平時製作網線時一般都為直連網線或者交叉網線 製作方法如下 正線 標準568b 兩端線序一樣,線序都是 白橙,橙,白綠,藍,白藍,綠,白棕,棕。1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 即直連線 反線 568a 即交叉線 一端為正線的線序,另一端為 ...

簡單的設計不簡單

最近看了 簡約至上 這本書,這本文章總結一下。推薦給對互動設計感興趣的童鞋。話說簡單 首先人們喜歡簡單 值得信賴 適應性強的產品。所以我們才會費盡心力去設計簡單的產品。人們喜歡簡單的產品原因有 1 產品的功能越多,就越難發現真正對使用者有價值的新功能。2 因為增加的複雜性導致他們很難找到自己真正需要...

簡單的設計不簡單

最近看了 簡約至上 這本書,這本文章總結一下。推薦給對互動設計感興趣的童鞋。話說簡單 首先人們喜歡簡單 值得信賴 適應性強的產品。所以我們才會費盡心力去設計簡單的產品。人們喜歡簡單的產品原因有 1 產品的功能越多,就越難發現真正對使用者有價值的新功能。2 因為增加的複雜性導致他們很難找到自己真正需要...