简单选择排序
属于选择排序
两两比较,找到极值(极大或极小)放置到固定位置,一般是某一端
结果分为升序和降序排列
简单选择排序
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的次数为时间复杂度