选择排序:
一、语言描述:从一列数字中依次选出最小的放第一位,次小的放第二位,依次类推完成整个排序
- 第一次遍历,找到最小的数字,放在第一个位置
- 第二次遍历,找到第二大的数字,放在第二个位置
- ...... 以此类推,完成整个排序
固定位置,找元素
- 对于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)