python第三十二天 演算法

2022-04-29 01:45:05 字數 4622 閱讀 8113

演算法(algorithm):乙個計算過程,解決問題的方法

時間複雜度:用來評估演算法執行效率的乙個東西

ps:在日常使用中,請使用sort(),because no zuo no die!

1.氣泡排序:

指標如同氣泡一樣乙個個由下向上浮,每次上浮如果上面的數比自己小則交換位置,這樣就保證每次可以使最大的數字排列在最上面,重複此過程直到所有數有序;時間複雜度為o(n2),wtf,平方怎麼打,就醬吧。

1

defbubble_sort_x(data):

2for i in range(len(data)-1): #

在迴圈到最後乙個數的時候就不需要再比較了,因為此時列表已經排列好了

3for j in range(len(data)-i-1): #

指標一點點上浮的過程

4if data[j] > data[j+1]

5 data[j+1], data[j] = data[j], data[j+1]

"調優後",但是你會發現並不是真正的調優,時快時慢,因為此調優僅對當某次交換完成後發現下面的數並未進行交換(也就是已經排序好了),那麼就可以認為已經完成可以返回了,但是因為是這種特殊情況並不是每次都會出現,但是每次迴圈你必須要做一次判斷,so,這個時間開銷卻是必須的,因此權衡利弊這下,北神還是覺得上面的好,簡單易懂,萌萌噠。

1

defbubble_sort(data):

2for i in range(len(data)-1):

3 exchange =false

4for j in range(len(data) - i - 1):

5if data[j] > data[j+1]:

6 data[j], data[j+1] = data[j+1], data[j]

7 exchange =true8if

notexchange:

9return

2.選擇排序:

預設以無序區第乙個數為列表內的最小數,然後遍歷列表開始跟預設比較大小,如果發現了比預設值小的則成為新的預設最小數,遍歷完成後會發現列表中的最小數再與第乙個數互換位置,重複此過程就可以保證列表從第乙個數開始由小到大排序;時間複雜度為o(n2),執行時間比冒泡快,因為它與冒泡一樣都對數就行了比較,但是並沒有直接互換位置,直到一次迴圈完成後找到了最小數才進行了一次位置互換,so,氣泡排序被吊打了。

1

definsert_sort_x(data):

2for i in range(len(data)-1):

3 min_loc =i

4for j in range(i+1, len(data)): #

從下乙個開始跟i比較

5if data[j] 6 min_loc =j

7 data[i], data[min_loc] = data[min_loc], data[i]

3.希爾排序:

選擇排序的公升級版本,講列表進行多次分段後各自進行排序,最後形成乙個偏向有序的大列表,然後對整個大列表進行一次選擇排序形成最終有序列表,看不懂就對了,沒什麼卵用。

1

defshell_sort_x(data):

2 gap = int(len(data) // 2)

3while gap >= 1:

4for i in

range(gap, len(data)):

5 tmp =data[i]

6 j = i -gap

7while j >= 0 and tmp 8 data[j + gap] =data[j]

9 j -=gap

10 data[i - gap] =tmp

11 gap = gap // 2

4.快速排序:

取第乙個元素x使其歸位,列表分成兩部分,左邊都比x小,右邊都比x大,然後對這兩邊遞迴進行排序。

1

defquick_sort_x(data, left, right):

2 mid = partition(data, left, right) #

x歸位3 quick_sort_x(data, left, mid-1)

4 quick_sort_x(data, mid+1, right)56

defpartition(data, left, right):

7 tmp =data[left]

8while left 9while left < right and data[range] >=tmp:

10 right -= 1

11 data[left] =data[right]

12while left < right and data[left] <=tmp:

13 left += 1

14 data[right] =data[left]

15 data[left] = tmp

5.歸併排序:

將陣列遞迴切分成單個元素後對比排序合併。

1

defmerge_sort_x(data, low, high):

2if low 3 mid = (low + high) // 2

4merge_sort_x(data, low, mid)

5 merge_sort_x(data, mid+1, high)

6merge(data, low, mid, high)78

defmerge(data, low, mid, high):

9 i =low

10 j = mid + 1

11 ltmp =

12while i <= mid and j <=high:

13if data[i] < data[j]: #

兩邊數依次取出比較大小

1415 i += 1

16else:17

18 j += 1

19while i <= mid: #

下面2個while只有乙個會執行

2021 i += 1

22while j <=high:

2324 j += 1

25 data[low:high+1] = ltmp

6.插入排序:

預設第乙個元素是有序的,然後根據依次比較下乙個元素與有序區內元素確定其位置。

1

definsert_sort_x(data):

2for i in range(1, len(data)):

3 tmp =data[i]

4 j = i - 1

5while j >= 0 and tmp 6 data[j + 1] =data[j]

7 j -= 1

8 data[j + 1] = tmp

7.堆排序:

建立乙個堆,後去掉堆頂元素為最大元素放置於堆末尾(之後不參與計算),通過一次調整再次得到堆頂,迴圈重複此過程。

1

defsift(data, low, high):

2 i =low

3 j = 2 * i + 1

4 tmp =data[i]

5while j <=high:

6if j < high and data[j] < data[j + 1]:

7 j += 1

8if tmp 9 data[i] =data[j]

10 i =j

11 j = 2 * i + 1

12else:13

break

14 data[i] =tmp

1516

defheap_sort_x(data):

17 n =len(data)

18for i in range(n // 2 - 1, -1, -1):

19 sift(data, i, n - 1)

20for i in range(n - 1, -1, -1):

21 data[0], data[i] =data[i], data[0]

22 sift(data, 0, i - 1)

第三十二天

多表操作 1 型別 1 對1 1對多 主外來鍵 多對多 中間表 2 笛卡爾積 select from pet p,emp e where p.ren e.empno 3 子查詢 巢狀查詢 將查詢語句嵌入到某個查詢中 例 查詢 張三 所擁有的寵物資訊 select p.from pet p,emp e...

第三十二天

程序 1 什麼是程序 程序指的是乙個正在進行 執行的程式,程序是用來描述程式執行過程的虛擬概念 程序vs程式 程式 一堆 程序 程式的執行的過程 程序的概念起源於作業系統,程序是作業系統最核心的概念,作業系統其它所有的概念都是圍繞程序來 作業系統理論 1.作業系統是什麼?作業系統是乙個協調 管理 控...

打卡第三十二天

mysql grant all privileges on to root localhost identified by some pass with grant option 本地操作的許可權 mysql grant all privileges on to root identified by...