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的次数为时间复杂度

  • 相关阅读:
    elasticsearch 基本操作
    ElasticSearch停止启动
    oracle误删数据
    多层级sql查询
    max_result_window
    测试ik分词效果
    TransportClient 新建index,mappings dynamic_templates。
    7.10考试
    C#生成TXT文件
    C#的进度条--progressBar
  • 原文地址:https://www.cnblogs.com/rprp789/p/9495077.html
Copyright © 2011-2022 走看看