选择排序:
选择排序有序排列部分是维持在列表的前段的,这一点很重要,因为这决定了我们从哪个元素开始假设这一趟比较交换的最小值。
选择排序的思想:
总是假设未排序部分的第一个元素为最小值,然后遍历这个元素之后的剩下的元素,不断更新未排序部分最小值存在的位置,这趟比较结束了,就把找到的最小值和第一个元素交换
所以外层循环我们开始假设最小值的位置:
是从第[0]个元素开始假设最小值在的位置:for i in range(n)
内层循环我们依次进行比较,记录最小值的位置
从第[i+1]个元素开始找真正的最小值:for j in range(i + 1)
找到最小值之后,就和第一个元素做交换
def selectionSort(nums): n = len(nums) # 这里有个小细节,最后一次假设的最小元素的位置只要是n-2就可以了,因为是从i+1开始找真正的最小值 for i in range(n - 1): min_index = i for j in range(i + 1, n): if nums[j] < nums[min_index]: min_index = j nums[i], nums[min_index] = nums[min_index], nums[i] return nums if __name__ == "__main__": numbers = [3, 6, 2, 1, 8, 7, 9, 5] print(selectionSort(numbers))
时间复杂度:O(n2)
空间复杂度:O(1)