Python 选择排序
选择排序的排序原理是每一次都从待排序的元素和中选择出最小或者最大的一个元素,存放在起始的位置,例如,从开始j,i两个索引,j负责起始位置,也就是j的索引是指向最小的值,然后在j的之后的元素中找最小的值,然后更新small_value_index,当找到最小元素的时候,将j和最小元素交换位置。
代码如下:
# -*- coding: utf-8 -*-
# @Time : 2018/6/5 8:38
# @Author : li
# @File : selection_sort.py
import random
# 迭代选择排序
def selection_sort(array):
for j in range(0, len(array)):
small_value_index = j
for i in range(j, len(array)):
if array[i] < array[small_value_index]:
small_value_index = i
array[j], array[small_value_index] = array[small_value_index], array[j]
return array
# 递归选择排序
def selection_sort_rec(array, n):
if n == 0:
return
max_value_index = n
for i in range(0, n):
if array[i] > array[max_value_index]:
max_value_index = i
array[n], array[max_value_index] = array[max_value_index], array[n]
selection_sort_rec(array, n-1)
return array
if __name__=="__main__":
array = [random.randrange(10000+i) for i in range(10)]
print(array)
print("------------选择排序(非递归)--------------")
print(selection_sort(array))
print("------------选择排序(递归)--------------")
print(selection_sort_rec(array, len(array)-1))
运行结果:
[209, 8881, 3947, 6143, 8603, 8167, 2374, 6885, 9229, 8921]
------------选择排序(非递归)--------------
[209, 2374, 3947, 6143, 6885, 8167, 8603, 8881, 8921, 9229]
------------选择排序(递归)--------------
[209, 2374, 3947, 6143, 6885, 8167, 8603, 8881, 8921, 9229]
Process finished with exit code 0