class Solution:
def selectionSort(self,nums:list[int])->list[int]:
for i in range(len(nums)-1):
min_pos=i
for j in range(i+1,len(nums)):
if nums[j]<nums[min_pos]:
min_pos=j
if i != min_pos:
nums[i],nums[min_pos]=nums[min_pos],nums[i]
return nums
if __name__=="__main__":
solution=Solution()
test_nums=[43,12,62,88,13,64,17,32]
result=solution.selectionSort(test_nums)
print(result)
思路:分为已排序区+未排序区,每次从未排序区取一个最小的元素放到已排序区尾部
i代表已排序区的末尾位置
j代表未排序区移动的判断位置
数据处理特点
- 原地排序:只需要常数级别的额外空间(O (1))
- 不稳定排序:相等元素的相对位置可能改变(例如 [2,2,1] 排序后第一个 2 会到第二个 2 后面)
- 时间复杂度:无论最好最坏情况都是 O (n²),因为总要完成所有比较
- 交换次数少:最多进行 n-1 次交换(每轮最多一次),优于冒泡排序
选择排序适合数据量小或对交换操作成本敏感的场景,其核心优势是交换次数少,逻辑直观易懂。
8060

被折叠的 条评论
为什么被折叠?



