标签:%s 相同 查找 main with ESS sel 选择 rom
假设有一个数组需要使用选择排序的方法将数据从小到大排序,工作步骤如下:
# -*- coding: utf-8 -*-
"""
@Time : 2020/4/11 13:24
@Author : focksor
@Contact : focksor@outlook.com
"""
from random import randint
def selection_sort(arr):
print("原始列表:", arr)
for i in range(len(arr)):
min_index = i
# 获取最小元素的索引
for j in range(i+1, len(arr)):
if arr[min_index] > arr[j]:
min_index = j
arr[i], arr[min_index] = arr[min_index], arr[i]
print("第%s次排序后: %s" % (i+1, arr))
print("排序完成:", arr)
if __name__ == ‘__main__‘:
arr = [randint(0, 10000) for _ in range(10)]
selection_sort(arr)
原始列表: [4104, 8091, 732, 4719, 4860, 4893, 8129, 1410, 8934, 5257]
第1次排序后: [732, 8091, 4104, 4719, 4860, 4893, 8129, 1410, 8934, 5257]
第2次排序后: [732, 1410, 4104, 4719, 4860, 4893, 8129, 8091, 8934, 5257]
第3次排序后: [732, 1410, 4104, 4719, 4860, 4893, 8129, 8091, 8934, 5257]
第4次排序后: [732, 1410, 4104, 4719, 4860, 4893, 8129, 8091, 8934, 5257]
第5次排序后: [732, 1410, 4104, 4719, 4860, 4893, 8129, 8091, 8934, 5257]
第6次排序后: [732, 1410, 4104, 4719, 4860, 4893, 8129, 8091, 8934, 5257]
第7次排序后: [732, 1410, 4104, 4719, 4860, 4893, 5257, 8091, 8934, 8129]
第8次排序后: [732, 1410, 4104, 4719, 4860, 4893, 5257, 8091, 8934, 8129]
第9次排序后: [732, 1410, 4104, 4719, 4860, 4893, 5257, 8091, 8129, 8934]
第10次排序后: [732, 1410, 4104, 4719, 4860, 4893, 5257, 8091, 8129, 8934]
排序完成: [732, 1410, 4104, 4719, 4860, 4893, 5257, 8091, 8129, 8934]Process finished with exit code 0
选择排序第一次排序需要检查n个元素以寻找最小值,第二次需要检查n-1个,第三次需要检查n-2个。。。所以排序完成需要的操作数为:\(n+(n-1)+(n-2)+...+2\),可以看出这是一个公差为1的等差数列,和为\((n+2)*n/2\),所以选择排序的时间复杂度为\(O(n^2)\)
排序算法稳定性是指,具有相同关键字的记录,排序完成后前后次序是否发生变化,如果变化则称为是不稳定的,否则为稳定的
假设有原始数组[2,1#1,1#2](这里的#1,#2仅是用于标记这是第几个1的),通过选择排序,完成后的列表为[1#2,1#1,2],可见相同关键字1的两个元素排序前后次序发生了变化,所以选择排序是不稳定的。
标签:%s 相同 查找 main with ESS sel 选择 rom
原文地址:https://www.cnblogs.com/focksor/p/12679464.html