致謝: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
classnode
(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 語言中可以用陣列處理一組資料型別相同的資料,但不允許動態定義陣列的大小,即在使用陣列之前必須確定陣列的大小。而在實際應用中,使用者使用陣列之前無法確定陣列的大小,只能夠將陣列定義成足夠大小,這樣陣列的空間可能不被使用,從而造成記憶體空間的...