- 选择排序算法
- 经典选择排序
例题1.使用选择排序算法对列表a升序排序。
函数名:selection_sort(a)
参数表:a -- 待排序列表。
返回值:该方法没有返回值,但是会对列表的对象进行升序排序。
算法思想:外层循环控制待排序数组的左边界,即a[i:]为待排序部分;内层循环扫描a[i+1:],找到最小元素的下标
def selection_sort(a):
for i in range(len(a)-1):
imin = i
for j in range(i+1, len(a)):
if a[j] < a[imin]:
imin = j
if imin != i:
a[i], a[imin] = a[imin], a[i]
- 双向选择排序
例题2.使用双向选择排序算法对列表a升序排序。
函数名:selection_sort_2(a)
参数表:a -- 待排序列表。
返回值:该方法没有返回值,但是会对列表的对象进行升序排序。
def selection_sort_2(a):
left, right = 0, len(a)-1
while left < right:
imin = imax = left
for i in range(left+1, right+1):
if a[i] < a[imin]:
imin = i
elif a[i] > a[imax]:
imax = i
if imin != left: a[imin], a[left] = a[left], a[imin]
if imax == left: imax = imin
if imax != right: a[imax], a[right] = a[right], a[imax]
left, right = left+1, right-1
- 选择排序简单应用
同步训练1.有一组正整数,要求分别对奇数进行升序排序,偶数进行降序排序,其中奇数在前,偶数在后。要求运用选择排序算法思想完成本题。
例如:排序前a = [6, 3, 5, 4, 1, 2, 8, 7],排序后a = [1, 3, 5, 7, 8, 6, 4, 2]。
函数名:selection_sort_3(a)
参数表:a -- 待排序列表。
返回值:该方法没有返回值,但是会对列表的对象进行排序。
def selection_sort_3(a):
left, right = 0, len(a)-1
while left <= right:
imin = left
for i in range(left+1, right+1):#查找最小值下标
if a[i] < a[imin]:
imin = i
if a[imin] % 2 == 1: #是奇数则把最小值交换到左端
a[imin], a[left] = a[left], a[imin]
left += 1
else: #是偶数则把最小值交换到右端
a[imin], a[right] = a[right], a[imin]
right -= 1