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)
  • 相关阅读:
    浏览器缓存之灾
    js控制页面带参跳转
    解决 iOS7 通过tag 找不到 UITableViewCell 的子控件(转)
    Xcode工程添加第三方文件的详细分析 Create folder references for any added folders(转)
    iOS开发 frame 与 bounds 的区别与关系 转自隔叶黄莺
    关于UIGestureRecognizerState
    iOS 开发,工程中混合使用 ARC 和非ARC(转)
    iOS使用NSURLConnection发送同步和异步HTTP Request
    关于error:Cannot assign to 'self' outside of a method in the init family
    ios学习之UIWebView网页视图调整
  • 原文地址:https://www.cnblogs.com/lizitest/p/9553652.html
Copyright © 2011-2022 走看看