• 排序算法之简单选择排序


    1.1简单选择排序

    属于选择排序 
    两两比较大小,找出极值(极大值或极小值)被放置在固定的位置,这个固定位置一般指的是 某一端 
    结果分为升序和降序排列 
    

    1.2降序

     n个数从左至右,索引从0开始到n-1,两两依次比较,记录大值索引,此轮所有数比较完毕,将 大数和索引0数交换,如果大数就是索引1,不交换。第二轮,从1开始比较,找到最大值,将它 和索引1位置交换,如果它就在索引1位置则不交换。依次类推,每次左边都会固定下一个大数。 
    

    1.3升序

    和降序相反
    

    1.4区别于冒泡排序

    冒泡排序,俩俩比较交换位置
    选择排序,每次循环找出极值,在交换索引
    减少了交换次数,提高了效率,性能略好于冒泡法
    

      

    1.5利用python实现降序排序

    m_list = [1,9,8,5,6,7,4,3,2]
    length = len(m_list)
    for i in range(length):
    #假定索引0的位置是最大值
        maxindex = i
        for j in range(i+1,length):
    #在第一次遍历极值的时候发现有比0索引还大的值,把此时的索引值赋值给maxindex
            if m_list[maxindex]<m_list[j]:
                maxindex = j
    #当所有的值都是按降序排序的时候,不用进行交换,否则进行一下操作
        if i != maxindex:
            tmp = m_list[i]
            m_list[i] = m_list[maxindex]
            m_list[maxindex] = tmp
    print(m_list)

     1.5.2优化实现;同时固定左边的最大值和右边的最小值;优点减少迭代次数

    #二元简单选择排序
    lst = [1,9,8,5,6,7,4,3,2]
    length = len(lst)
    
    for i in range(length // 2):
        maxindex = i
        minindex = -i-1
    #遍历最大值,从左开始到最后一个值,
    #遍历最小值,从右开始到最后一个值
    #遍历下个i的时候,索引0和索引-1的值不需要在比较。所以是length-i
        for j in range(i+1,length-i):
            if lst[j]>lst[maxindex]:
                maxindex = j
            if lst[-j-1]<lst[minindex]:
                minindex = -j-1
    #假设正索引0的位置是最大的,循环后发现不是,做值的交换
        if i!=maxindex:
            lst[i],lst[maxindex] = lst[maxindex],lst[i]
            #正索引,负索引2种方式去判断,如果i的位置是最小值的索引
            #进入到if里,max已经和i交换了位置,所以需要把max的索引赋值给min
            if i==minindex or i == length + minindex:
                minindex = maxindex
    #假设负索引的位置是-1,循环后发现如果不是,做值的交换
        if (-i-1)!=minindex:
            lst[minindex],lst[-i-1]=lst[-i-1],lst[minindex]
    print(lst)
    本文为原创文章,转载请标明出处
  • 相关阅读:
    ruilei.cnblogs 访问量突破20万
    VSTS2008 Load Test Agent
    失落的星球 Lost Planet 秘籍
    C#去除特殊字符串
    Linq Coding Part Nine(IEnumerable、IQueryable、Set)
    Web Services Software Factory tutorial (1 of 5)
    迅雷新闻快讯区JS代码剖析
    Interfaces Topic
    前台如何调用后台事件
    [关注]个税起征点8000元什么时候到来?
  • 原文地址:https://www.cnblogs.com/harden13/p/8697988.html
Copyright © 2020-2023  润新知