python 面試常考資料結構演算法

2021-08-20 05:34:52 字數 3712 閱讀 2119

致謝:python基礎演算法/劍指offer

這裡整理的都是基礎的不能再基礎的演算法,目的就是進行乙個回憶,同時作為劍指offer的乙個補充~嘿嘿~

# 實現乙個二分查詢

# 輸入:乙個順序list

# 輸出: 待查詢的元素的位置

def binarysearch(alist, item):

first = 0

last = len(alist) - 1

while

first

<= last:

mid = (first + last

)//2

print(mid)

if alist[mid] > item:

last = mid - 1

elif alist[mid] < item:

first = mid + 1

else:

return

mid+1

return -1

test = [0, 1, 2, 8, 13, 17, 19, 32, 42]

print(binarysearch(test, 3))

def

bubblesort

(alist):

for passnum in range(len(alist)-1, 0, -1):

for i in range(passnum):

if alist[i] > alist[i+1]:

alist[i], alist[i+1] = alist[i+1], alist[i]

return alist

def

insertionsort

(alist):

for index in range(1, len(alist)):

currentvalue = alist[index]

position = index

while position > 0

and alist[position-1] > currentvalue:

alist[position] = alist[position-1]

position -= 1

alist[position] = currentvalue

def

quicksort

(alist):

quicksorthelper(alist, 0, len(alist)-1)

defquicksorthelper

(alist, first, last):

if first < last:

splitpoint = partition(alist, first, last)

quicksorthelper(alist, first, splitpoint-1)

quicksorthelper(alist, splitpoint+1, last)

defpartition

(alist, first, last):

pivotvlue = alist[first]

leftmark = first+1

rightmark = last

done = false

while leftmark > rightmark:

while alist[leftmark] <= pivotvlue and leftmark <= rightmark:

leftmark += 1

while alist[rightmark] >= pivotvlue and rightmark >= leftmark:

rightmark -= 1

alist[leftmark], alist[rightmark] = alist[rightmark], alist[leftmark]

alist[rightmark], alist[first] = alist[first], alist[rightmark]

return rightmark

def

selectionsort

(alist):

for i in range(len(alist)-1):

min = i

for j in range(i+1, len(alist)):

if alist[j] < alist[min]:

min = j

alist[i], alist[min] = alist[min], alist[i]

return alist

class

solution:

defbubblesort

(nums):

# 這個迴圈負責設定氣泡排序進行的次數

for i in range(len(nums)-1):

# j為列表下標

for j in range(len(nums)-i-1):

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

nums[j], nums[j+1] = nums[j+1], nums[j]

return nums

class

node

(object):

def__init__

(self,data=none,left=none,right=none):

self.data=data

self.left=left

self.right=right

#深度defdepth

(tree):

if tree==none:

return

0 left,right=depth(tree.left),depth(tree.right)

return max(left,right)+1

#前序遍歷

defpre_order

(tree):

if tree==none:

return

print tree.data

pre_order(tree.left)

pre_order(tree.right)

#中序遍歷

defmid_order

(tree):

if tree==none:

return

mid_order(tree.left)

print tree.data

mid_order(tree.right)

#後序遍歷

defpost_order

(tree):

if tree==none:

return

post_order(tree.left)

post_order(tree.right)

print tree.data

#層次遍歷

deflevel_order

(tree):

if tree==none:

return

q=while q:

current=q.pop(0)

print current.data

if current.left!=none:

if current.right!=none:

面試常考資料結構與演算法

資料結構部分 1 陣列和鍊錶的區別。很簡單,但是很常考,記得要回答全面 c 語言中可以用陣列處理一組資料型別相同的資料,但不允許動態定義陣列的大小,即在使用陣列之前必須確定陣列的大小。而在實際應用中,使用者使用陣列之前無法確定陣列的大小,只能夠將陣列定義成足夠大小,這樣陣列的空間可能不被使用,從而造...

面試常考資料結構與演算法

資料結構部分 1 陣列和鍊錶的區別。很簡單,但是很常考,記得要回答全面 c 語言中可以用陣列處理一組資料型別相同的資料,但不允許動態定義陣列的大小,即在使用陣列之前必須確定陣列的大小。而在實際應用中,使用者使用陣列之前無法確定陣列的大小,只能夠將陣列定義成足夠大小,這樣陣列的空間可能不被使用,從而造...

面試常考資料結構與演算法

1 陣列和鍊錶的區別。很簡單,但是很常考,記得要回答全面 c 語言中可以用陣列處理一組資料型別相同的資料,但不允許動態定義陣列的大小,即在使用陣列之前必須確定陣列的大小。而在實際應用中,使用者使用陣列之前無法確定陣列的大小,只能夠將陣列定義成足夠大小,這樣陣列的空間可能不被使用,從而造成記憶體空間的...