简单选择排序和二元选择排序

简单选择排序

属于选择排序

两两比较,找到极值(极大或极小)放置到固定位置,一般是某一端

结果分为升序和降序排列

简单选择排序

nums = [1,4,5,3,2]
for i in range(len(nums)):
    maxnum = i
    
    for j in range(i + 1,len(nums)):
        if nums[maxnum] < nums[j]:
             maxnum = j
    if maxnum != i:
        nums[i],nums[maxnum] = nums[maxnum],nums[i]
nums

二元选择排序

nums = [1,4,5,3,2]
for i in range(len(nums)//2):
    maxnum = i
    minnum = len(nums)-i-1
    for j in range(i + 1,len(nums)-i):
        if nums[maxnum] < nums[j]:
             maxnum = j
        if nums[minnum] > nums[len(nums)-j-1]:
            minnum = len(nums)-j-1
    if maxnum != i:
        nums[i],nums[maxnum] = nums[maxnum],nums[i]
        if minnum == i:
            minnum = maxnum
    if minnum != len(nums)-i-1:
        nums[len(nums)-i-1],nums[minnum] = nums[minnum],nums[len(nums)-i-1]
nums

二元选择排序的思路

从左和右同时固定最大值和最小值,优化思路是在发现最大最小值相等时,停止交换

要注意在交换了最大值后,最小值如果记录在之前最大值储存的位置时,要在交换完最大值时,判断一下,最小值此时所在位置的索引

二元交换的时间复杂度仍是O(n^2),两轮循环的次数都是n,相乘后的公式变形后取最高次数位的n的次数为时间复杂度

猜你喜欢

转载自www.cnblogs.com/rprp789/p/9495077.html