標籤:第一個 sel 時間 選擇排序 str 定位 python style int
選擇排序:
一、語言描述:從一列數字中依次選出最小的放第一位,次小的放第二位,依次類推完成整個排序
- 第一次遍曆,找到最小的數字,放在第一個位置
- 第二次遍曆,找到第二大的數字,放在第二個位置
- ...... 以此類推,完成整個排序
固定位置,找元素
- 對於n個元素的數組,從第一個位置開始,找到最小,放在第一個位置
- 從第二個位置開始,剩下的數組中,找到最小,放在第二個位置
- ....
- 從第n-1個位置開始,在剩下的數組中,找到最小,放在第n-1個位置
代碼實現:
# encoding=utf-8
def selectSort(listx):
xLen = len(listx)
for i in xrange(xLen):
min = i
for j in xrange(i+1,xLen):
if listx[min] > listx[j]:
min = j
listx[i],listx[min] = listx[min],listx[i]
return listx
if __name__ == ‘__main__‘:
print selectSort([32,34,55,66,5])
習題一:修改成降序排列
#enconding = utf-8
def Select_Sort(lista):
for i in xrange(len(lista)):
min = i
for j in xrange(i+1,len(lista)):
if (lista[min] < lista[j]):
min = j
lista[min],lista[i] = lista[i],lista[min]
return lista
if __name__ == ‘__main__‘:
print Select_Sort([32,14,67,8,21])
習題2:代碼是否存在不必要的比較,是否可以減去,說出原因
# encoding=utf-8
def selectSort(listx):
xLen = len(listx)
for i in xrange(xLen-1):
min = i
for j in xrange(i+1,xLen):
if listx[min] > listx[j]:
min = j
listx[i],listx[min] = listx[min],listx[i]
return listx
if __name__ == ‘__main__‘:
print selectSort([32,34,55,66,5])
二、計算時間複雜度
32,34,55,66,5
第一輪:5,32,34,55,66 n-1次
第二輪:5,32,34,55,66 n-2次
...
第五輪:5,,32,34,55,66 1次
1+2+3+... +n-2+ n-1 = n(n-1)/2
時間複雜度為 O(n^2)
python演算法-選擇排序