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

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

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

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

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

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

猜你喜欢

转载自www.cnblogs.com/andy0816/p/12348379.html