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

    # 选择排序:选择极大或极小值,跟第一个进行交换
    lst = [1, 3, 9, 8, 5, 2, 7, 4, 6]
    length = len(lst)
    for i in range(length):
    maxValueIndex = i # 先假定第一个为最大值
    for j in range(i+1, length): # 从第二个开始跟第一个比较
    if lst[j] > lst[maxValueIndex]:
    maxValueIndex = j;

    if i != maxValueIndex: # 找到最大值的index后,进行交换
    tmp = lst[i]
    lst[i] = lst[maxValueIndex]
    lst[maxValueIndex] = tmp

    print(lst)

    print('-------------------------------------')
    # 选择排序:优化 - 每趟分别找到最大值和最小值
    lst = [1, 3, 9, 8, 5, 2, 7, 4, 6]
    length = len(lst)
    for i in range(length // 2): # 循环少一半
    maxValueIndex = i # 先假定第一个为最大值
    minValueIndex = -i-1 # 假定最后一个为最小值
    minOrigin = minValueIndex # 记录最小值的原始index
    for j in range(i+1, length-i): # 从第二个开始跟第一个比较
    if lst[j] > lst[maxValueIndex]:
    maxValueIndex = j
    if lst[- j - 1] < lst[minValueIndex]:
    minValueIndex = - j - 1

    if i != maxValueIndex: # 找到最大值的index后,进行交换
    tmp = lst[i]
    lst[i] = lst[maxValueIndex]
    lst[maxValueIndex] = tmp
    # 如果最小值被交换过,更新索引
    if i == minValueIndex or i == length + minValueIndex:
    minValueIndex = maxValueIndex

    # 最小值索引不同,但值相同,不用交换了
    if minOrigin != minValueIndex and lst[minOrigin] != lst[minValueIndex]:
    tmp = lst[minOrigin]
    lst[minOrigin] = lst[minValueIndex]
    lst[minValueIndex] = tmp

    print(lst)

    print('-------------------------------------')
    # 选择排序:优化 - 最大值最小值相等,跳出循环
    lst = [1, 3, 9, 1, 1, 1, 1, 1, 1]
    length = len(lst)
    for i in range(length // 2): # 循环少一半
    maxValueIndex = i # 先假定第一个为最大值
    minValueIndex = -i-1 # 假定最后一个为最小值
    minOrigin = minValueIndex # 记录最小值的原始index
    for j in range(i+1, length-i): # 从第二个开始跟第一个比较
    if lst[j] > lst[maxValueIndex]:
    maxValueIndex = j
    if lst[- j - 1] < lst[minValueIndex]:
    minValueIndex = - j - 1

    # 如果元素相同,结束循环
    if lst[maxValueIndex] == lst[minValueIndex]:
    break

    if i != maxValueIndex: # 找到最大值的index后,进行交换
    tmp = lst[i]
    lst[i] = lst[maxValueIndex]
    lst[maxValueIndex] = tmp
    # 如果最小值被交换过,更新索引
    if i == minValueIndex or i == length + minValueIndex:
    minValueIndex = maxValueIndex

    # 最小值索引不同,但值相同,不用交换了
    if minOrigin != minValueIndex and lst[minOrigin] != lst[minValueIndex]:
    tmp = lst[minOrigin]
    lst[minOrigin] = lst[minValueIndex]
    lst[minValueIndex] = tmp

    print(lst)
  • 相关阅读:
    K3Cloud 解决方案版本号问题
    K3Cloud 通过元数据查询单据信息
    K3Cloud 设置分录的字段颜色
    K3Cloud 干预标准产品插件
    K3Cloud 根据单据ID 获取单据视图和数据包
    K3Cloud 后台修改账户密码策略
    K3Cloud 选择基础资料允许显示未审核数据
    K3Cloud 根据内码和基础资料元数据获取基础资料数据包
    按照应用场景划分安全测试
    常见业务场景的安全测试及安全开发
  • 原文地址:https://www.cnblogs.com/lizitest/p/9553652.html
Copyright © 2011-2022 走看看