热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

排序算法简述1

排序算法冒泡排序选择排序插入排序快速排序归并排序希尔排序冒泡排序(拿一个数去和其他数比)数组中的一个元素分别和数组中的其他元素比较,满足

排序算法

  • 冒泡排序
  • 选择排序
  • 插入排序
  • 快速排序
  • 归并排序
  • 希尔排序


冒泡排序

(拿一个数去和其他数比)数组中的一个元素分别和数组中的其他元素比较,满足一定要求时,便将两数的索引进行交换,不停的进行此操作。(此方法表示在原地进行)

def bubble_sort(li):for i in range(len(li)-1): #第i趟排序for j in range(len(li)-i-1):if li[j]>li[j+1]: #升序,若要降序排序将大于号改为小于号即可li[j],li[j+1]=li[j+1],li[j]
选择排序

不停遍历整个数组,将满足要求的元素取出放入一个新列表中

(此代码复杂度较高)
def select_sort_simple(li):li=[]for i in range(len(li)):min_val=min(li)li.append(min_val)li.remove(min_val)return li

插入排序

插入排序:(用其他数与一个数比)控制前方数字,将后面的数字陆续与前方的数字做比较,满足要求时便将数字插入即可(原地进行)

def insert_sort(li):for i in range(1,len(li)):tmp=li[i]j=i-1while li[j]>tmp and j>=0:li[j+1]=li[j]j-=1li[j+1]=tmp

快速排序

先将第一个元素取出,然后现在开始用右边的数与其比较,若有一个比其小的数,便将这个数移到取出的第一个元素的位置,这时,这个数的位置便又空了,接着就需要看左边比取出元素大的数,将其移到右边空的位置,然后再看右边比取出元素小的数移到左边的位置,周而复始的左右左右移动,即可完成程序

def partition(li,left,right): #left表示第一个元素的索引&#xff0c;即0&#xff1b;right表示最后一个元素的索引&#xff0c;即len(li)-1tmp&#61;li(left)while left<right:while li[right]>&#61;tmp and left<right:right-&#61;1li[left]&#61;li[right]while left<right and li[left]<&#61;tmp:left&#43;&#61;1li[right]&#61;li[left]li[left]&#61;tmp

归并排序

归并排序&#xff1a;即对序列的元素进行逐层折半分组&#xff0c;然后从最小分组开始比较排序&#xff0c;合并成一个大的分组&#xff0c;逐层进行&#xff0c;最终所有的元素都是有序的。归并一般使用情况是先分解&#xff0c;即将列表越分越小&#xff0c;直至分成一个元素&#xff1b;终止条件是当一个元素是有序的&#xff1b;最后是合并是将两个有序列表归并&#xff0c;列表越来越大.
在这里插入图片描述

def merge(li,low,mid,high):i&#61;lowj&#61;mid&#43;1tmp&#61;[]while i<&#61;mid and j<&#61;high:if li[i]<li[j]:tmp.append(li[i])i&#43;&#61;1else:tmp.append(li[j])j&#43;&#61;1while i<&#61;mid:tmp.append(li[i])i&#43;&#61;1while j<&#61;high:tmp.append(li[i])j&#43;&#61;1li[low:high&#43;1]&#61;tmp

希尔排序

是一种分组插入排序算法&#xff0c;首先取一个整数d1&#61;n//2&#xff0c;将元素分为d1个组&#xff0c;每组相邻量元素之间距离为d1&#xff0c;在各组内进行直接插入排序&#xff0c;同理之后取第二个整数d2&#61;d1//2&#xff0c;继续以上操作&#xff0c;直至dn&#61;1&#xff0c;就表明已将所有元素在同一组内进行直接插入排序。注&#xff1a;希尔排序每次遍历排序并没有使一些元素有序&#xff0c;是混乱的&#xff0c;但是整体是趋于有序的
在这里插入图片描述

def insert_sort_gap(li,gap):for i in range(gap,len(li)):tmp&#61;li[i]j&#61;i-gapwhile j>&#61;0 and li[j]>tmp:li[j&#43;gap]&#61;li[j]j-&#61;gapli[j&#43;gap]&#61;tmpprint(li)def shell_sort(li):d&#61;len(li)//2while d>&#61;1:insert_sort_gap(li,d)d//&#61;2


推荐阅读
  • 十大经典排序算法动图演示+Python实现
    本文介绍了十大经典排序算法的原理、演示和Python实现。排序算法分为内部排序和外部排序,常见的内部排序算法有插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。文章还解释了时间复杂度和稳定性的概念,并提供了相关的名词解释。 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了logistic回归(线性和非线性)相关的知识,包括线性logistic回归的代码和数据集的分布情况。希望对你有一定的参考价值。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • Explain如何助力SQL语句的优化及其分析方法
    本文介绍了Explain如何助力SQL语句的优化以及分析方法。Explain是一个数据库SQL语句的模拟器,通过对SQL语句的模拟返回一个性能分析表,从而帮助工程师了解程序运行缓慢的原因。文章还介绍了Explain运行方法以及如何分析Explain表格中各个字段的含义。MySQL 5.5开始支持Explain功能,但仅限于select语句,而MySQL 5.7逐渐支持对update、delete和insert语句的模拟和分析。 ... [详细]
  • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
  • Oracle分析函数first_value()和last_value()的用法及原理
    本文介绍了Oracle分析函数first_value()和last_value()的用法和原理,以及在查询销售记录日期和部门中的应用。通过示例和解释,详细说明了first_value()和last_value()的功能和不同之处。同时,对于last_value()的结果出现不一样的情况进行了解释,并提供了理解last_value()默认统计范围的方法。该文对于使用Oracle分析函数的开发人员和数据库管理员具有参考价值。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 本文介绍了游标的使用方法,并以一个水果供应商数据库为例进行了说明。首先创建了一个名为fruits的表,包含了水果的id、供应商id、名称和价格等字段。然后使用游标查询了水果的名称和价格,并将结果输出。最后对游标进行了关闭操作。通过本文可以了解到游标在数据库操作中的应用。 ... [详细]
  • 本文详细介绍了Spring的JdbcTemplate的使用方法,包括执行存储过程、存储函数的call()方法,执行任何SQL语句的execute()方法,单个更新和批量更新的update()和batchUpdate()方法,以及单查和列表查询的query()和queryForXXX()方法。提供了经过测试的API供使用。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 本文讨论了如何使用IF函数从基于有限输入列表的有限输出列表中获取输出,并提出了是否有更快/更有效的执行代码的方法。作者希望了解是否有办法缩短代码,并从自我开发的角度来看是否有更好的方法。提供的代码可以按原样工作,但作者想知道是否有更好的方法来执行这样的任务。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • 欢乐的票圈重构之旅——RecyclerView的头尾布局增加
    项目重构的Git地址:https:github.comrazerdpFriendCircletreemain-dev项目同步更新的文集:http:www.jianshu.comno ... [详细]
  • 在Oracle11g以前版本中的的DataGuard物理备用数据库,可以以只读的方式打开数据库,但此时MediaRecovery利用日志进行数据同步的过 ... [详细]
author-avatar
一截藏青线
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有