---
# System prepended metadata

title: wk13 演算法
tags: [python]

---

{範例}
- 由小排到大排序 \<bubble>
- 追蹤泡沫排序法的過程 


```python
def switch(i):
    datas[i],datas[i+1]=datas[i+1],datas[i]
    
datas=[31,5,12,1]

print("排序前",datas)

n=len(datas)

for i in range(0,n):
    print(datas[i],datas[j],end=" ")
    for j in range(0,n-1):
        if datas[j]<datas[j+1]:
            switch(j)
    print(datas)
print("排序後",datas)
```

    排序前 [31, 5, 12, 1]
    31 12 [31, 12, 5, 1]
    12 5 [31, 12, 5, 1]
    5 5 [31, 12, 5, 1]
    1 5 [31, 12, 5, 1]
    排序後 [31, 12, 5, 1]
    


```python
datas[0],datas[1]=datas[1],datas[0]

print(datas)
```

    [3, 5, 2, 1]
    

【afterclass】

-  1.執行下列程式何者正確
- datas=[3,5,2,1]
- n=len(datas)-1
- for i in range(0,n):
    for j in range(0,n-i):
        if(datas[j]>datas[j+1]):
            datas[j],datas[j+1]=datas[j+1],datas[j]
- print(datas)

- ans:c


```python
datas=[3,5,2,1]
n=len(datas)-1
for i in range(0,n):
    for j in range(0,n-i):
        if(datas[j]>datas[j+1]):
            datas[j],datas[j+1]=datas[j+1],datas[j]
print(datas)
```

    [1, 2, 3, 5]
    

- 2.執行下列程式結果何者正確
- num=[67,12,9,52,91,3]
- no=52
- for i in range(len(num)):
    if(num[i]==no):
        break 
- print(i)
ans:d


```python
num=[67,12,9,52,91,3]
no=52
for i in range(len(num)):
    if(num[i]==no):
        break
print(i)
```

    3
    

3.下列哪一個排序法 執行搜尋前要先將資料排序
- ans:b 二元搜尋

4.有10000筆資料 使用循序搜尋最少需要多少次
ans:a 1

5.有10000筆資料 使用循序搜尋最多需要多少次 ans:b 10000

6.有10000筆資料 使用二元搜尋最多需要多少次 ans: d 14

7.下列哪一種搜尋方法效率最好 ans:a 二元 (不過主要還是要看場合使用啦)

8. 執行下列程式結果何者正確 ans:d以上皆非


```python
num=[256,731,943,389,142,645,829,945]
name=["林小虎","王森中","招募水","李大同","臣子恐","谮美麗","曾溫柔","錢來多"]
no=100
isFound=False
for i in range(len(name)):
    if (num[i]==no):
        isFound=True
        break
if(isFound==True):
    print("中獎者的姓名為:",name[i])
else:
    print("無此中獎號碼")
print("共比對%d次"%(i+1))
```

    無此中獎號碼
    共比對8次
    

9.同第八題 中獎者姓名?
ans: d 無此中獎號碼!

10.同第八題 這程式是
ans:b循序搜尋

- 名詞解釋 :
    - 演算法:為了解決一個問題採取的方法和步驟 
    - 虛擬碼:以一般語言來寫程式語言 讓人好理解
    - 流程圖:用圖像化表示程式邏輯步驟
