选择排序
选择排序
·稳定性分析:
不稳定排序:交换操作可能改变相同元素的相对顺序
·时间复杂度分析:
1.最坏情况:O(n²),无论数据初始状态如何,都需要两层嵌套循环遍历整个数组
2.平均情况:O(n²),与最坏情况相同
3.最好情况:O(n²),即使数组已排序仍需完整遍历
·空间复杂度分析:
O(1):原地排序,仅需常数级额外空间
·适用场景:
1.小型数据集或内存受限环境
2.对稳定性无要求的场景
·对比其他排序算法
特性 | 选择排序 | 插入排序 | 快速排序 |
---|---|---|---|
平均时间复杂度 | O(n²) | O(n²) | O(n log n) |
最坏时间复杂度 | O(n²) | O(n²) | O(n²) |
稳定性 | ❌ 不稳定 | ✅稳定 | ✅稳定 |
空间复杂度 | O(1) | O(1) | O(log n) |
python代码:
def selection_sort(arr):
n = len(arr) # 获取数列长度
for i in range(n):
mid_index = i # 先预设无序数列中,最小值为arr[i]
for j in range(i+1, n): # 控制排序范围,0-i为有序数列不需要排序
if arr[mid_index] > arr[j]: # 寻找无序数列中最小值
mid_index = j
arr[i], arr[mid_index] = arr[mid_index], arr[i] # 排序关键,将无序最小值和当前arr[i]交换
return arr
s = [97,52,51,75,13,89,34,55,40,40]
print(selection_sort(s))