函数实现选择排序
- 选择排序原理:
首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余的未排序的元素中继续寻找最小(大)元素,然后放到已排序的末尾。直到所有元素均排序完毕。 - 优点:
选择排序与数据移动有关。如果某个元素位于正确的最终位置上,则它不会被移动。选择排序每次交换一对元素,它们当中至少有一个将被移到其最终位置上,对 n 个元素的表进行排序只需进行至多 n-1 次交换。
时间复杂度:O(n²) 空间复杂度:O(1)
升序排列:
# 选择排序(升序、降序)
A = [-8, -9, 5, 6, 2, 3, 7]
print('升序:')
def sort1():
for i in range(len(A)):
minA = i # 序号
for j in range(i + 1, len(A)):
if A[minA] > A[j]:
minA = j
A[i], A[minA] = A[minA], A[i] # 交换位置
return A
print(f'排序后:{sort1()}')
升序:
排序后:[-9, -8, 2, 3, 5, 6, 7]
降序排列:
print('降序:')
def sort2(A):
for i in range(len(A)):
max_A = i # 序号
for j in range(i + 1, len(A)):
if A[max_A] < A[j]:
max_A = j
A[i], A[max_A] = A[max_A], A[i] # 交换位置
return A
B = [-8, 9, 6, 2, 1, 4, -10]
print(f'排序后:{sort2(B)}')
降序:
排序后:[9, 6, 4, 2, 1, -8, -10]
将升序、降序合并为一个函数程序:
# 将升序和降序合并为一个程序
# order>0为升序 order<0为降序
A = [-8, -9, 5, 6, 2, 3, 7]
def get_sort(arr, order):
for i in range(len(A)):
p = i
for j in range(i + 1, len(A)):
if (arr[p] > arr[j]) and (int(order) > 0) or (arr[p] < arr[j]) and (int(order) < 0):
# 条件合并判断
p = j
arr[i], arr[p] = arr[p], arr[i]
return arr
print(get_sort(A, 1))
print(get_sort(A, -1))
结果:
[-9, -8, 2, 3, 5, 6, 7]
[7, 6, 5, 3, 2, -8, -9]
这篇博文比较简明,方面日后查阅,链接:Python 八大算法比较