• 数据结构和算法-排序算法-选择排序


     ##################     选择排序        #######################

    """
    选择排序
    思路是怎么样的?
    现在有一个序列:alist = [54,226,93,17,77,31,44,55,20]
    先遍历所有的,n个,把最小的放到最前面,  alist = [17,       54,226,93,77,31,44,55,20]
    然后遍历剩下的,n-1个,把最小的放到前面去,   alist = [17,20       54,226,93,77,31,44,55]
    然后一直循环,结束之后,整个的序列就是从小打到的了,
    
    
    程序实现
    第一轮,把下标为0的最为最小值,    min=0,然后遍历,遇到把它还小的就开始做交换,  alist[0],alist[3] = alist[3],alist[0]
    第二轮,把下标为1的最为最小值,    min=1,然后遍历,遇到把它还小的就开始做交换,  alist[1],alist[8] = alist[8],alist[0]
    第三轮,把下标为2的最为最小值,    min=2,然后遍历,遇到把它还小的就开始做交换,  alist[2],alist[5] = alist[5],alist[0]
    所以整体的思路就是把整个的序列分为两部分,始终是把后面的最小的放到前面去,
    
    
    """

    ##################     选择排序        #######################

    # 第一版:
    def selection_sort(alist):
        n = len(alist)
        # 需要进行n-1次选择操作
        for i in range(n-1):
            # 记录最小位置
            min_index = i
            # 从i+1位置到末尾选择出最小数据
            for j in range(i+1, n):
                if alist[j] < alist[min_index]:
                    min_index = j
            # 如果选择出的数据不在正确位置,进行交换
            alist[i], alist[min_index] = alist[min_index], alist[i]
    
    # 第二版:
    def selection_sort2(alist):
        n = len(alist)
        # 需要进行n-1次选择操作
        for i in range(n-1):
            # 记录最小位置
            min_index = i
            # 从i+1位置到末尾选择出最小数据
            for j in range(i+1, n):
                if alist[j] < alist[min_index]:
                    min_index = j
            # 如果选择出的数据不在正确位置,进行交换
            if min_index != i:
                alist[i], alist[min_index] = alist[min_index], alist[i]
    
    
    if __name__ == '__main__':
        alist = [54,226,93,17,77,31,44,55,20]
        print(alist)
        selection_sort(alist)
        print(alist)

    ##################     选择排序        #######################

    ##################     选择排序        #######################

    ##################     选择排序        #######################

  • 相关阅读:
    假期总结三
    假期总结三
    假期总结三
    假期总结三
    Redis 在线管理工具(phpRedisAdmin)介绍 两次git
    Redis 在线管理工具(phpRedisAdmin)介绍 两次git
    Redis 在线管理工具(phpRedisAdmin)介绍 两次git
    Redis 在线管理工具(phpRedisAdmin)介绍 两次git
    进程
    C# exe文件 添加到windows 服务
  • 原文地址:https://www.cnblogs.com/andy0816/p/12348379.html
Copyright © 2020-2023  润新知