选择排序,Python

x33g5p2x  于2021-12-30 转载在 Python  
字(1.0k)|赞(0)|评价(0)|浏览(224)

选择排序符合人类直观,容易理解。工作过程:

(第一轮)先选择数组array的第一个元素,即array[0]作为被对比对象,然后从数组array的第2个位置即array[1](常规情况如此,当然你也可以从右边开始),扫描整个数组,找出最小的数据min_value,然后将这个min_value和array数组中的第一个数据(即array[0])交换。

(第二轮)选择数组中的第二个元素,即array[1],然后从array[1]后面的数据中选择最小的数据与array[1]交换。

如此循环往复,最终多轮,直到将数据选择完毕。

举例,现在有5个未排序数据,[3,4,0,1,2],使用选择排序排序。

(第1轮)选择第1个数据:3,扫描剩余的4,0,1,2,发现0是最小数据,把3和0交换。新数组变为[0,4,3,1,2]

(第2轮)选择第2个数据:4,扫描剩余的3,1,2,发现1是最小数据,把4和1交换。新数组变为[0,1,3,4,2]

(第3轮)选择第3个数据:3,扫描剩余的4,2,发现2是最小数据,把3和2交换。新数组变为

[0,1,2,4,3]

(第4轮)选择第4个数据:4,扫描剩余的3,发现3是最小数据,把4和3交换。新数组变为

[0,1,2,3,4]

python代码例子:

def app():
    data = [3, 4, 0, 1, 2]

    print('没有排序前', data)
    print('-----')
    selection_sort(data)
    print('选择排序后', data)

# 选择排序
def selection_sort(data):
    for i in range(len(data) - 1):
        j = i + 1

        min_value = data[i]
        min_index = i

        while True:
            if j == len(data):
                break

            if data[j] < min_value:
                min_value = data[j]
                min_index = j

            j = j + 1

        temp = data[i]
        data[i] = min_value
        data[min_index] = temp

        print('第', (i + 1), '轮', data)

if __name__ == '__main__':
    app()

输出:

没有排序前 [3, 4, 0, 1, 2]
-----
第 1 轮 [0, 4, 3, 1, 2]
第 2 轮 [0, 1, 3, 4, 2]
第 3 轮 [0, 1, 2, 4, 3]
第 4 轮 [0, 1, 2, 3, 4]
选择排序后 [0, 1, 2, 3, 4]

相关文章