Python入门
  • Python入门
  • 0. 基础知识与安装
    • 0. 计算机基础知识
    • 1. Windows下安装
    • 2. 通过软件包管理器安装
    • 3. 通过源码安装
    • 4. 多版本管理
    • 5. Python的基础知识
    • 6. Python的内存管理
  • 1. 基本语法
  • 2. 内置数据结构
    • 1. 列表
    • 2. 元组
    • 3. 字符串
    • 4. bytes与bytearray
    • 5. 集合 (set)
    • 6. 字典
  • 3. 操作
    • 迭代与迭代器
    • 封装与解构
    • 解析式与生成器
    • 切片操作
    • del操作
  • 4. 函数
    • 1. 函数的定义与调用
    • 2. 函数的参数与参数解构
    • 3. 函数的返回值
    • 4. 函数的作用域
    • 5. 闭包
    • 6. 默认值的作用域
    • 7. 递归
  • 5. 高阶函数
    • 0. 柯里化
    • 1. 高阶函数
    • 2. 装饰器
    • 3. 参数注解
  • A. 内建函数
  • B. 算法
    • 1. 排序
      • 1.冒泡法排序
      • 2. 简单选择排序
      • 3. 二元选择排序
  • C. 模块
    • collections
    • copy
    • datetime
    • keyword
    • math
    • time
  • D. 习题
    • 九九乘法表
    • 打印菱形、三角形、闪电
    • 斐波那契数列
    • 求素数
    • 猴子吃桃
    • 杨辉三角
    • 转置矩阵
Powered by GitBook
On this page
  • 定义
  • 优点(与简单选择排序比较)
  • 代码实现

Was this helpful?

  1. B. 算法
  2. 1. 排序

3. 二元选择排序

Previous2. 简单选择排序NextC. 模块

Last updated 6 years ago

Was this helpful?

参见

定义

在简单选择排序的基础上,一次遍历时直接同时找到最大值与最小值。

优点(与简单选择排序比较)

减少了遍历次数

代码实现

nums = [1, 9, 8, 5, 6, 7, 4 , 3, 2]
length = len(nums)
for i in range(length-1):
    max_index = i
    min_index = length-1-i
    for j in range(i+1,length):
        if nums[max_index] < nums[j]:
            max_index = j
        if nums[min_index] > nums[length-j]:
            min_index = length - j
    if nums[max_index] == nums[min_index]:
        break
    if i!=max_index:
        nums[i],nums[max_index] = nums[max_index],nums[i]
        if i - length  == min_index:
            min_index = max_index - length
    if length - i -1 != min_index and nums[length - i - 1] != nums[min_index]: 
        nums[length - i -1],nums[min_index] = nums[min_index],nums[length - i - 1]
print(nums)

B.1.2. 简单选择排序