zoukankan      html  css  js  c++  java
  • 简单选择排序和二元选择排序

    简单选择排序

    属于选择排序

    两两比较,找到极值(极大或极小)放置到固定位置,一般是某一端

    结果分为升序和降序排列

    简单选择排序

    nums = [1,4,5,3,2]
    for i in range(len(nums)):
        maxnum = i
        
        for j in range(i + 1,len(nums)):
            if nums[maxnum] < nums[j]:
                 maxnum = j
        if maxnum != i:
            nums[i],nums[maxnum] = nums[maxnum],nums[i]
    nums

    二元选择排序

    nums = [1,4,5,3,2]
    for i in range(len(nums)//2):
        maxnum = i
        minnum = len(nums)-i-1
        for j in range(i + 1,len(nums)-i):
            if nums[maxnum] < nums[j]:
                 maxnum = j
            if nums[minnum] > nums[len(nums)-j-1]:
                minnum = len(nums)-j-1
        if maxnum != i:
            nums[i],nums[maxnum] = nums[maxnum],nums[i]
            if minnum == i:
                minnum = maxnum
        if minnum != len(nums)-i-1:
            nums[len(nums)-i-1],nums[minnum] = nums[minnum],nums[len(nums)-i-1]
    nums

    二元选择排序的思路

    从左和右同时固定最大值和最小值,优化思路是在发现最大最小值相等时,停止交换

    要注意在交换了最大值后,最小值如果记录在之前最大值储存的位置时,要在交换完最大值时,判断一下,最小值此时所在位置的索引

    二元交换的时间复杂度仍是O(n^2),两轮循环的次数都是n,相乘后的公式变形后取最高次数位的n的次数为时间复杂度

  • 相关阅读:
    mysql 查询优化 ~ select count 知多少
    mongodb 案例 ~ 经典故障案例
    printk 驱动调试
    21天学通C++学习笔记(七):函数
    OPC UA
    MQTT
    分库分表
    水平、垂直权限问题(横向越权与纵向越权)
    数据库中的行转列和列转行
    面试知识点
  • 原文地址:https://www.cnblogs.com/rprp789/p/9495077.html
Copyright © 2011-2022 走看看