把教材《演算法設計與分析》的c/c++理解並翻譯成python從小到大排序練習python+演算法
# 這一輪下來後,lists[count-i-1]就會是這次排序中遇到的最大的數,所以第一次外迴圈時,陣列的最後乙個數就是陣列中最大的數
lists[j],lists[j+1]=lists[j+1],lists[j]
return lists
lists=[22,55,84,21,2,4,100]
lists=bubble_sort(lists)
print lists
將兩個有序的子陣列a,b,合併為乙個有序的陣列new
def merge(a,b):
new =
m,n=0,0
while m
ifa[m]1
else:
n +=1
if m
fornumin range(m,len(a)):
else:
fornumin range(n,len(b)):
return
newif __name__=='__main__':
la=[1,3,5,7,9]
lb=[0,2,4,6,8,10,11,12]
print(merge(la,lb))
# 輸出結果:
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
首先判斷陣列中最前面的兩個元素,並使它們按照遞增順序排序;然後把第3個元素與前兩個元素一次進行比較,並把它放在合適的位置,使得前面3個元素是有序的;接下來第4,第5,……直到第n個元素與前面n-1個元素一次進行比較,把它放在合適的位置,這樣就成為乙個有序的陣列了
# 參考
definsert_sort
(lists):
# 從小到大排序
count = len(lists)
for i in range(1, count):
key = lists[i]
j = i - 1
while j >= 0:
if lists[j] > key:
lists[j + 1] = lists[j]
lists[j] = key
j -= 1
return lists
lists=[10,5,12,6,8]
print insert_sort(lists)
或者
def
insert_sort
(lists):
# 從小到大
for i in range(1,len(lists)):
key=lists[i]
for j in range(0,i):
if lists[j]>key:
# 開始往後挪
k=iwhile k>=j:
lists[k]=lists[k-1]
k-=1
lists[j]=key
# 注意這裡要有乙個break,不然明明已經比較並放在正確位置後會繼續比較一次,然後就會有乙個數不見了
break
return lists
lists=[10,5,12,6,8,2,88,20]
print insert_sort(lists)
給定乙個有序的元素列表和乙個數,查詢該數在這個有序列表中的位置,使用二分查詢每次可以排除一半的元素
# o(log n)
defbinary_search
(list,item):
low=0
high=len(list)-1
while low<=high: #只要範圍沒有縮小到只剩乙個元素
mid=(low+high)/2
guess=list[mid]
if guess==item:
return mid
if guess > item:
high=mid-1
if guess < item:
low=mid+1
return
none
#測試一下
mylist=[1,3,5,7,9]
print binary_search(mylist,3)
print binary_search(mylist,-1)
# 輸出:
# 1
# none
將a柱子上的圓盤按一定規則借助b柱子完美地複製到c柱子上。規則:每次移動乙個盤子,且只能讓小的放在大的上面
演算法思路:①先用c柱子作為輔助,遞迴呼叫本演算法,把a最上面的n-1個圓盤移到b柱子;②再把下面的一片圓盤從a移動到c;③最後再用a作為輔助,遞迴呼叫本演算法,把n-1片圓盤從b移到c。
# -*- coding: utf-8 -*-
defmove
(n,a,b,c):
if n==1:
print('將%s上的%s從%s->%s'%(a,n,a,c))
else:
# ①=》②=》③
move(n-1,a,c,b)
print('將%s上的%s從%s->%s'%(a,n,a,c))
move(n-1,b,a,c)
#測試move(4,'a','b','c')
好久之前寫的,有點亂
參考:
Python演算法學習《二》
說謊問題 某地發生了一件 案,警察通過排查確定殺人 必為4個 嫌疑犯的乙個。以下為4個嫌疑犯的供詞。a說 不是我。b說 是c。c說 是d。d說 c在胡說 已知3個人說了真話,1個人說的是假話。現在請根據這些資訊,寫乙個程式來確定到底誰是 class solution object def who m...
演算法學習 python 6
氣泡排序 coding utf 8 def bubblesort list1 for j in range 0,len list1 1 增加乙個計數器 count 0 for i in range len list1 1 j,j,1 if list1 i list1 i 1 list1 i list...
python 演算法學習筆記1
python中array 是一整塊單一連續的記憶體區域,根據索引值訪問的話可以直接計算出目標元素在記憶體中的位置,對於鍊錶要從頭開始遍歷 鍊錶插入代價小,數值插入代價大,要移動右邊所有的元素 這邊的陣列指動態陣列 複雜度o 構建排序演算法之前先對序列進行檢查,如果目標已經排過序則直接返回 def s...