常見的演算法

2021-10-04 17:19:02 字數 2814 閱讀 1658

演算法衡量的標準:

1.時間複雜度:

​ 兩個程式的執行時間如何衡量?

​ 答:用time模組來判斷,time.time()來進行計算,前提是兩段程式必須執行在同乙個硬體相同(cpu)的環境下,才會有意義

因此,我們使用時間差的方式來衡量乙個程式是否快慢沒有任何的意義。所以使用程式執行的大概次數,來衡量程式的執行快慢,這種衡量的方式稱之為時間複雜度,使用o()來記

如何判斷時間複雜度?

​ 迴圈減半的過程o(logn)

​ 幾次迴圈就是n的幾次方的複雜度

2.空間複雜度:

這段程式執行的過程,是否占用了記憶體空間

演算法:​ 排序演算法:

​ 氣泡排序

​ 選擇排序

​ 插入排序

​ 快速排序

​ 希爾排序

​ 桶排序(計數排序)

​ 動態規劃 貪心(分糖果,人民幣問題) 揹包問題

​ 查詢:

​ 順序查詢

​ 二分查詢

# 氣泡排序

# 時間複雜度:最差的情況:o(n^2) 最好的情況:o(n)

# 空間複雜度: o(1)

# 先找到最大的數放列表末尾位置,從右往左排

defbubble_sort

(li)

:for i in

range

(len

(li)-1

):for j in

range

(len

(li)-1

- i)

:if li[j]

> li[j +1]

: li[j]

, li[j +1]

= li[j +1]

, li[j]

# 改良

defbubble_sort2

(li)

:for i in

range

(len

(li)-1

):flag =

true

for j in

range

(len

(li)-1

- i)

:if li[j]

> li[j +1]

: li[j]

, li[j +1]

= li[j +1]

, li[j]

flag =

false

if flag:

return

# 選擇排序

# 時間複雜度是: o(n^2)

# 先找到最小的數放在列表的起始位置,從左往右排

defselect_sort

(li)

:for i in

range

(len

(li)):

minloc = i

for j in

range

(i +1,

len(li)):

if li[minloc]

> li[j]

: li[minloc]

, li[j]

= li[j]

, li[minloc]

# 插入排序

# 時間複雜度: o(n^2)

definsert_sort

(li)

:for i in

range(1

,len

(li)):

tmp = li[i]

j = i -

1while j >=

0and li[j]

> tmp:

li[j +1]

= li[j]

j = j -

1 li[j -1]

= tmp

# 快速排序

# 時間複雜度: o(nlogn)

defpartition

(li, left, right)

: tmp = li[left]

while left < right:

while left < right and li[right]

>= tmp:

right = right -

1 li[left]

= li[right]

while left < right and li[left]

<= tmp:

left = left +

1 li[right]

= li[left]

li[left]

= tmp

return left

defquick_sort

(li, left, right)

:if left < right:

mid = partition(li, left, right)

# 歸位函式

quick_sort(li, left, mid -1)

quick_sort(li, mid +

1, right)

li =[7

,5,4

,6,3

,8,2

,9,1

]# li = [1, 2, 3, 4, 5, 6]

# bubble_sort(li)

# select_sort(li)

# select_sort(li)

quick_sort(li,0,

len(li)-1

)print

(li)

常見的演算法

private static int binarysearch int list,int target else if target list mid else if target list mid return 1 public static void bubblesort int arr 基本思...

常見的排序演算法

一 氣泡排序 include include void swap int a,int b void bubblesort int arr,int size int main void bubblesort a,5 for int i 0 i 5 i cout 二 選擇排序 void selectio...

常見的排序演算法

需要包含的標頭檔案 include stdafx.h include include include 氣泡排序是穩定排序 時間複雜度 o n 2 void swap int a,int b void bubblesort int a,int n void printnum int a,int n a...