基本思想
从要排序的数组中选出最小(或最大)的数,与第一位交换,再从剩下的数组中选择最小(或最大)的数,与第二位交换,以此执行,直到最后两个数相比较。
Python实现
def simpleSelect(a):
# 简单选择排序: 小->大
for i in xrange(0, len(a) - 1):
x = min(a[i:])
x_index = a.index(x)
a[i], a[x_index] = a[x_index], a[i]
return a
print simpleSelect([11, 1, 6, 9, 8, 5])
Python实现--不使用自带的min函数
def simpleSelect(a):
# 简单选择排序: 小->大
for i in xrange(0, len(a) - 1):
min_index = i
for j in xrange(i, len(a)):
if a[min_index] > a[j]:
min_index = j
a[i], a[min_index] = a[min_index], a[i]
return a
print simpleSelect([11, 1, 6, 9, 8, 5])
Python实现--二元选择排序
def simpleSelect(a):
# 二元选择排序: 小->大
# 对简单选择排序的改进,同时选出最大和最小,循环为 n / 2
n = len(a)
for i in xrange(0, n / 2):
min_index = i
max_index = i
for j in xrange(i + 1, n - i):
if a[min_index] > a[j]:
min_index = j
continue
if a[max_index] < a[j]:
max_index = j
a[i], a[min_index] = a[min_index], a[i]
# 注意,这个很重要!
if i == max_index:
max_index = min_index
a[n - i - 1], a[max_index] = a[max_index], a[n - i - 1]
return a
print simpleSelect([11, 1, 6, 9, 8, 5])
效率
O(n^2)