zoukankan      html  css  js  c++  java
  • 选择排序

    选择排序分为升序或降序排列
    两两比较大小,找出极值(极大值或极小值),然后放置到最后或最前
    减少了交换次数,提高了效率,性能略好于冒泡排序

    # 降序
    # 第一轮,n个数从左至右,索引从0开始到n-1,两两依次比较,记录最大值的索引,此轮所有数比较完毕,将最大数和索引为0的数交换,如果最大数就是索引0,则不交换
    # 第二轮,从索引1开始比较,找到最大值,将最大值和索引1位置交换,如果它就在索引1位置则不交换。以此类推,每次左边都会固定下一个最大数
    
    t = [1, 9, 8, 5, 6, 7, 4, 3, 2]
    
    for i in range(len(t) - 1):
        # 假设进入循环的第一个数就是最大数
        maxindex = i
        # 两两比较,直到找出最大值,并记录最大值索引
        for j in range(i+1, len(t)):
            if t[j] > t[maxindex]:
                maxindex = j
        # 如果最大值不是当前第一个数,则将最大值与第一个数交换
        if maxindex != i:
            t[i], t[maxindex] = t[maxindex], t[i]
    
    print(t)
    # [9, 8, 7, 6, 5, 4, 3, 2, 1]
    
    # 升序,改变一下判断条件即可
    
    t = [1, 9, 8, 5, 6, 7, 4, 3, 2]
    
    for i in range(len(t) - 1):
        minindex = i
        for j in range(i+1, len(t)):
            if t[j] < t[minindex]:
                minindex = j
        if minindex != i:
            t[i], t[minindex] = t[minindex], t[i]
    
    print(t)
    # [1, 2, 3, 4, 5, 6, 7, 8, 9]
    

    参考:
    https://zh.wikipedia.org/wiki/选择排序

  • 相关阅读:
    servlet生命周期总结
    两周找工作有感
    PowerBuilder中新建PBL
    oracle navicat 可视化操作进行数据的修改
    oracle for update for update nowait
    表中字段为关键字,查询字段加引号
    愿你
    oracle安装注意
    随笔
    JeeSite功能模块解读,功能介绍,功能实现
  • 原文地址:https://www.cnblogs.com/keithtt/p/9517130.html
Copyright © 2011-2022 走看看