在剛開始接觸演算法時,我們可能一臉懵,不知從何處下手,尤其是現在使用的語言五花八門,各種語言的實現又不盡相同,所以,在這種情況下,千萬不能迷失了自己,掌握了演算法的原理,就像解數學公式一樣,定理給你了,仔細想想便可以用**來實現它,前提要養成良好的解題思路.
下面我們來從入門的排序演算法開始:
以下都是針對乙個無序陣列 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 因為增加的複雜性導致他們很難找到自己真正需要...