zoukankan      html  css  js  c++  java
  • 数据结构和算法-排序算法-选择排序

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

    """
    选择排序
    思路是怎么样的?
    现在有一个序列: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)

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

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

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

  • 相关阅读:
    RDLC报表开发技巧备忘
    C#3.0"扩展方法"简记
    将activity转化成view
    取消logcat输出
    低栏的项目切换
    android edittext 限制文本框输入的长度和提示信息
    android如何调用dotnet编写的webservice
    iphone 式退出
    几种tabhost的总结(1)
    切换浏览示意图
  • 原文地址:https://www.cnblogs.com/andy0816/p/12348379.html
Copyright © 2011-2022 走看看