python实现选择排序 -- 详细思路分析

作者: 于饼喵 | 来源:发表于2020-06-26 20:24 被阅读0次

1. 选择排序思想

将数组分为左右两部分,左边放置的是有序的元素,右边放置的是无序的元素,每次从无序的部分找出最小的元素放到左边有序的部分。【始终从右边未排序部分选择一个最小的放到左边已排序部分的末尾】


2. 选择排序实现步骤

2-1.第一次遍历

第一次排序
  • 第一次遍历,假设0号索引位置的元素是最小值【min_index = 0】
  • 其他每个元素都与0号索引位置元素对比,如果值比0号索引位置元素小,则将min_index赋值为当前最小元素的索引【如上图min_index从0变为6】,因此游标 i需要从0索引位置走到n-1索引位置。用for循环表示为for i in range(1,n)
  • 遍历完成后,交换0号元素和最小值元素的位置。经过第一次遍历后,便可以将数组中最小的元素排在数组0号索引位置
"""第一次遍历代码"""
n = len(target_list)
min_index = 0
for i in range(1,n):
    if target_list[min_index] > target_list[i]:
        min_index = i
target_list[0],target_list[min_index] = target_list[min_index],target_list[0]

2.2.多次遍历

第二次排序
  • 第二次遍历,因为0号索引已经排好,所以假设1号索引位置是最小值【min_index = 1】
  • 重复上述交换min_value步骤,就可以把第二小的元素放到1号索引的位置
  • 遍历完成后,左边排序好的元素便会增加一个次小的元素
第n-1次排序
  • 经过上面的分析可以发现,每遍历一次,起始元素的索引都加1。另一方面,我们只需要确定n-1个数的位置,便可以确定所有元素的位置。【n-1个元素位置确定后,剩下一个位置的元素就可以确定】因此,我们假设起使游标的位置是 j,j只需要走到n-2索引的位置,便可以确定所有元素的位置。range()函数左闭右开,所以可以确定for j in range(0,n-1)
  • 对应的,只需要将上面第一次遍历的代码部分的0索引改为j索引即可
def select_sort(target_list):
    n = len(target_list)
    # # j只需要走到n-2的位置
    for j in range(0,n-1):
        min_index = j
        # i游标需要走完所有从j+1开始所有的索引位置
        for i in range(j+1,n):
            if target_list[min_index] > target_list[i]:
                min_index = i
        target_list[j],target_list[min_index] = target_list[min_index],target_list[j]

相关文章

  • python实现选择排序 -- 详细思路分析

    1. 选择排序思想 将数组分为左右两部分,左边放置的是有序的元素,右边放置的是无序的元素,每次从无序的部分找出最小...

  • python实现快速排序 -- 详细思路分析

    1. 快速排序思想 通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要...

  • python实现归并排序 -- 详细思路分析

    1. 归并排序思想 是建立在归并操作上的一种有效的排序算法。先将数组分解成多个元素,然后对分解后的元素进行排序和合...

  • python实现冒泡排序 -- 详细分析思路

    1. 冒泡排序的思想 重复遍历要排序的数列,每次比较两个位置的元素,如果不符合排序规则,则交换两个位置的元素,一直...

  • 排序算法详细代码实现

    算法分类 算法时间复杂度 选择排序 插入排序 C++实现 Python实现 冒泡排序 Python实现 归并排序 ...

  • 【算法】排序(一)选择排序

    在排序算法中,最简单的莫过于选择排序了。 本文将介绍以下内容 排序思路算法实现(JAVA)测试阶段算法分析 排序思...

  • 数据结构基础学习之(内排序)

    学习知识 排序基本概念 插入排序的实现方法及性能分析 交换排序的实现方法及性能分析 选择排序的实现方法及性能分析 ...

  • python实现双向链表 -- 详细思路分析

    双链表的每个节点都有两个指针,一个指向直接后继,一个指向直接前驱。在双向链表的任意一个节点都能很方便的访问其前后节...

  • python实现单向链表 -- 详细思路分析

    顺序表的构建需要预先知道数据大小来申请连续的存储空间,而且在进行扩充时又需要进行数据的搬迁,所以使用起来不是很灵活...

  • 选择排序

    选择排序的核心思路 选择排序的实现思路类似插入排序。也是将整个数组划分为已排序区间和未排序区间。两者的不同点在于,...

网友评论

    本文标题:python实现选择排序 -- 详细思路分析

    本文链接:https://www.haomeiwen.com/subject/zwqufktx.html