首页 > 其他分享 >选择排序

选择排序

时间:2022-10-31 00:44:16浏览次数:57  
标签:sort loc min 复杂度 选择 lst 排序 select

选择排序

循环遍历列表,每次找到最小的一个数,放到一个新列表中

简单版

def select_sort_simple(lst):
    new_lst = []
    for i in range(len(lst)):  # 总共需要遍历多少遍
        min_val = min(lst)
        new_lst.append(min_val)
        lst.remove(min_val)
    return new_lst


lst = [99, 77, 1, 2, 7, 4, 5, 3, 66, 88]
ret=select_sort_simple(lst)
print(ret)

以上方式存在缺陷,如果列表数据量大,在开辟一个新列表,占用的内存就是2倍大,冒泡排序是原地排序,同时min()方法和remove()方法都增加了复杂度,min()会占一个O(N)的复杂度,remove()占一个O(N)的复杂度, for循环一个O(N)的复杂度,所有加起来并不是三个O(N)的复杂度,是O(N)2次方

优化版-原地排序

 

 

 

def select_sort(lst):
    """
    每次找最小的数,跟最前面的数依次进行交换
    :param lst:
    :return:
    """
    for i in range(len(lst) - 1):  # 跟冒泡排序一样一共需要n-1趟
        # 无序区的范围,第0趟时候范围(0,最后),第1趟时候范围(1,最后),第i趟时候范围(i,最后)
        min_loc = i  # 记录最小数的位置(下标),无序区第一个数的位置
        for j in range(i + 1, len(lst)):
            if lst[j] < lst[min_loc]:
                min_loc = j
        # 内层for循环结束,找到了最小数的下标,此时用无序区的第一个数,跟它交换
        lst[i], lst[min_loc] = lst[min_loc], lst[i]
        print(lst)

lst = [99, 77, 1, 2, 7, 4, 5, 3, 66, 88]
select_sort(lst)
# print(lst)
优化代码

 

标签:sort,loc,min,复杂度,选择,lst,排序,select
From: https://www.cnblogs.com/TodayWind/p/16842879.html

相关文章

  • 排序算法之最长和谐子序列
    题目和谐数组是指一个数组里元素的最大值和最小值之间的差别正好是1。现在,给你一个整数数组nums,请你在所有可能的子序列中找到最长的和谐子序列的长度。数组的子序列是......
  • 排序算法之数组拆分
    题目给定长度为 2n 的整数数组nums,你的任务是将这些数分成 n对,例如(a1,b1),(a2,b2),...,(an,bn),使得从1到 n的min(ai,bi)总和最大。返回该最大总和......
  • 找到多个名为spring_web的片段。这是不合法的相对排序。有关详细信息,请参阅Servlet规
    问题描述:解决办法:1:检查pom.xml中是否包含多个spring-web字段;2:删除掉多余的spring-web.jar,保留一个即可;......
  • s005-排序算法的稳定性及排序总结
    s005-排序算法的稳定性及排序总结稳定性如果一个数组[1,1,0,0,0,2,3,2]最终排序后结果肯定是[0,0,0,1,1,2,2,3]如果排在前面的0在排序后也放在前面,如果排在前面的1在排......
  • 最终的选择:强化人性还是放弃人性?
    人性能改变吗?自有人性起我们就试图改变人性,我们从未认可人性的存在是理性的和理想的,我们需要人性之善而试图剔除人性之恶,我们需要保留并发扬人性美好的一面而试图灭除人性......
  • 分区内存管理分区选择法
    1.分区内存管理:把主存分为一段一段的,每一段的空间要比一页小很多,这种方法在空间利用率上比业式管理高很多,但有另外一个缺点:一个程序片段可能会被分为几十段,这样很多时间就......
  • Python 根据两个字段排序 中文排序 汉字排序 升序 降序
    Python3写法代码#-*-coding:utf-8-*-#需求:年龄倒序,姓名正序fromitertoolsimportchainfrompypinyinimportpinyin,StyleclassStudent:def__init__(self,na......
  • s004-桶排序
    s004-桶排序概念之前写的博客中讲述的排序算法,例如选择排序,冒泡排序,插入排序,快排,归并和堆排序都是基于比较的算法而桶排序不是基于比较的算法,而是基于数据状态的算法桶......
  • 0102-Go-通道选择器
    环境Time2022-08-24Go1.19前言说明参考:https://gobyexample.com/select目标使用Go语言的通道选择器。示例packagemainimport("fmt""time")......
  • switch多选择结构
    switch多选择结构多选择结构还有一个实现方式就是switchcase语句switchcase语句判断一个变量与一系列值中某个值是否相等,每个值称为一个分支。switch语句中的......