Lab3-P2-选择排序

任务描述

本关任务:首先给定一个长度大于1而且是乱序的列表,列表元素类型为整型,让后利用选择排序对列表元素进行排序,并输出每一次循环之后的结果。

选择排序

选择排序是一种最简单的排序思想。它的工作原理是:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。

详细步骤

首先把第一位和其他所有的元素按顺序进行比较,将第一个比第一位小的元素的索引赋值给min,然后再用索引为min的元素和其他没比完的元素比较,如果还有比他小的就将他的索引赋值给min,最后就把索引为min的元素换到第一个位置来,比较完后,第一位就是最小的,然后再从第二位和剩余的其他所有进行比较,以此类推,每循环一次,有序数列的长度就会加1,直到排序完成。 如图所示:

Lab3-P2-选择排序_第1张图片

复杂度分析
时间复杂度

需要遍历数组才能找到峰值元素,所以复杂度与原始序列是否有序无关,最好最坏和平均情况的时间复杂度都为O(n2)。

编程要求

算法如果不亲自实践一遍是很容易忘记的,所以请再右侧代码编辑器中补全Python代码。选择排序需要用到for循环的嵌套。

测试说明

平台会对你编写的代码进行测试:

测试输入:

6,84,8,31,22,5,2,33

预期输出:

[2, 84, 8, 31, 22, 5, 6, 33]

[2, 5, 8, 31, 22, 84, 6, 33]

[2, 5, 6, 31, 22, 84, 8, 33]

[2, 5, 6, 8, 22, 84, 31, 33]

[2, 5, 6, 8, 22, 84, 31, 33]

[2, 5, 6, 8, 22, 31, 84, 33]

[2, 5, 6, 8, 22, 31, 33, 84]

排序之后的结果为:[2, 5, 6, 8, 22, 31, 33, 84]

测试输入2:

4,16,4,23,51,99,68,48,66,98,15,23

预期输出2: [4, 4, 16, 23, 51, 99, 68, 48, 66, 98, 15, 23]

[4, 4, 15, 23, 51, 99, 68, 48, 66, 98, 16, 23]

[4, 4, 15, 16, 51, 99, 68, 48, 66, 98, 23, 23]

[4, 4, 15, 16, 23, 99, 68, 48, 66, 98, 51, 23]

[4, 4, 15, 16, 23, 23, 68, 48, 66, 98, 51, 99]

[4, 4, 15, 16, 23, 23, 48, 68, 66, 98, 51, 99]

[4, 4, 15, 16, 23, 23, 48, 51, 66, 98, 68, 99]

[4, 4, 15, 16, 23, 23, 48, 51, 66, 98, 68, 99]

[4, 4, 15, 16, 23, 23, 48, 51, 66, 68, 98, 99]

[4, 4, 15, 16, 23, 23, 48, 51, 66, 68, 98, 99]

排序之后的结果为:[4, 4, 15, 16, 23, 23, 48, 51, 66, 68, 98, 99]

# 选择排序
arraystr = input().split(',')
array = [int(i) for i in arraystr]


def selectsort(array):
    # ********* Begin *********
    for i in range(len(array) - 1):  # 确定循环次数;答案中应少循环一次,但题中保留最后一次循环
        min = i
        for j in range(i + 1, len(array)):  # 设立新的循环模式,方便比较自身与之后数字的大小
            if array[j] < array[min]:
                min = j
        array[i], array[min] = array[min], array[i]  # 调换数字位置
        print(array)
    # ********* End *********
    return array


print("排序之后的结果为:{}".format(selectsort(array)))

你可能感兴趣的:(生鸡蛋23大计の题,排序算法,数据结构,算法,python)