[排序N大件之]选择排序

选择排序:

选择排序有序排列部分是维持在列表的前段的,这一点很重要,因为这决定了我们从哪个元素开始假设这一趟比较交换的最小值。

选择排序的思想:

总是假设未排序部分的第一个元素为最小值,然后遍历这个元素之后的剩下的元素,不断更新未排序部分最小值存在的位置,这趟比较结束了,就把找到的最小值和第一个元素交换

所以外层循环我们开始假设最小值的位置:

是从第[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)

posted @ 2020-09-23 16:07  剪剪  阅读(97)  评论(0编辑  收藏  举报