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)
  • 相关阅读:
    vue学习第四天 ------ 临时笔记
    vue学习第三天 ------ 临时笔记
    vue学习第二天 ------ 临时笔记
    vue学习第一天 ------ 临时笔记
    vue ------ 安装和引入
    swagger-tools QuickStart
    build-your-microservices-api-with-swagger
    test-doubles-fakes-mocks-and-stubs
    swaggerhub 文档
    React Server Side Rendering
  • 原文地址:https://www.cnblogs.com/lizitest/p/9553652.html
Copyright © 2011-2022 走看看