选择排序python

作者: 楠木cral | 来源:发表于2019-02-18 20:34 被阅读0次

    一、概念及原理
    选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理如下。首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。

    选择排序的主要优点与数据移动有关。如果某个元素位于正确的最终位置上,则它不会被移动。选择排序每次交换一对元素,它们当中至少有一个将被移到其最终位置上,因此对n个元素的表进行排序总共进行至多n-1次交换。在所有的完全依靠交换去移动元素的排序方法中,选择排序属于非常好的一种。
    二、分析以及实现
    简单来说,序列循环找出最大或者最小值放在序列前面。其实和冒泡有一点点像,每次循环找出循环序列的最值放在最右边完成排序。
    用升序举例:
    1.用变量min_num做最小值记录,初始值设为序列第一个
    2.在右边序列循环找出最小值并与min_num交换
    3.与未排序的首元素交换
    4.重新将min_num定在未排序序列第一位

     for i in range(len(alist)-1):  # i:  0 ~ n-2
            min_num = alist[i]  # 每次循环结束后的最小值要重新定在未排序序列第一位的第一位
            for j in range(i+1, len(alist)):
                if alist[j] < min_num:
                    alist[j], min_num = min_num, alist[j]
            alist[i], min_num = min_num, alist[i]
        return alist
    

    完整代码:

    
    
    def select_sort(alist):
        count = 0
        for i in range(len(alist)-1):  # i:  0 ~ n-2
            min_num = alist[i]  # 每次循环结束后的最小值要重新定在右边列表的第一位
            for j in range(i+1, len(alist)):
    
                if alist[j] < min_num:
                    alist[j], min_num = min_num, alist[j]
                    count += 1
    
            alist[i], min_num = min_num, alist[i]
        return alist,count
    
    def main():
        alist = [2,5,7,9,4,1,5,7,3,5,86,45,221,10]
        print(select_sort(alist))
        listA = [2,5,8,4,9,5,1,4]
        print(select_sort(listA))
    
    if __name__ == '__main__':
        main()
    

    与冒泡排序比较,发现他们比较次数一样,选择排序具体会受实际待排序序列影响较大

    相关文章

      网友评论

        本文标题:选择排序python

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