热门标签 | 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


推荐阅读
  • 毕业设计:基于机器学习与深度学习的垃圾邮件(短信)分类算法实现
    本文详细介绍了如何使用机器学习和深度学习技术对垃圾邮件和短信进行分类。内容涵盖从数据集介绍、预处理、特征提取到模型训练与评估的完整流程,并提供了具体的代码示例和实验结果。 ... [详细]
  • MySQL索引详解与优化
    本文深入探讨了MySQL中的索引机制,包括索引的基本概念、优势与劣势、分类及其实现原理,并详细介绍了索引的使用场景和优化技巧。通过具体示例,帮助读者更好地理解和应用索引以提升数据库性能。 ... [详细]
  • 作者:守望者1028链接:https:www.nowcoder.comdiscuss55353来源:牛客网面试高频题:校招过程中参考过牛客诸位大佬的面经,但是具体哪一块是参考谁的我 ... [详细]
  • 本文介绍如何使用 NSTimer 实现倒计时功能,详细讲解了初始化方法、参数配置以及具体实现步骤。通过示例代码展示如何创建和管理定时器,确保在指定时间间隔内执行特定任务。 ... [详细]
  • 2023年京东Android面试真题解析与经验分享
    本文由一位拥有6年Android开发经验的工程师撰写,详细解析了京东面试中常见的技术问题。涵盖引用传递、Handler机制、ListView优化、多线程控制及ANR处理等核心知识点。 ... [详细]
  • 本文介绍如何通过创建替代插入触发器,使对视图的插入操作能够正确更新相关的基本表。涉及的表包括:飞机(Aircraft)、员工(Employee)和认证(Certification)。 ... [详细]
  • 本教程涵盖OpenGL基础操作及直线光栅化技术,包括点的绘制、简单图形绘制、直线绘制以及DDA和中点画线算法。通过逐步实践,帮助读者掌握OpenGL的基本使用方法。 ... [详细]
  • 本文由瀚高PG实验室撰写,详细介绍了如何在PostgreSQL中创建、管理和删除模式。文章涵盖了创建模式的基本命令、public模式的特性、权限设置以及通过角色对象简化操作的方法。 ... [详细]
  • 本文探讨了在Java中实现系统托盘最小化的两种方法:使用SWT库和JDK6自带的功能。通过这两种方式,开发者可以创建跨平台的应用程序,使窗口能够最小化到系统托盘,并提供丰富的交互功能。 ... [详细]
  • 本文介绍了一种解决二元可满足性(2-SAT)问题的方法。通过具体实例,详细解释了如何构建模型、应用算法,并提供了编程实现的细节和优化建议。 ... [详细]
  • 本文介绍如何使用 Python 的 xlrd 库读取 Excel 文件,并将其数据处理后存储到数据库中。通过实际案例,详细讲解了文件路径、合并单元格处理等常见问题。 ... [详细]
  • HBase运维工具全解析
    本文深入探讨了HBase常用的运维工具,详细介绍了每种工具的功能、使用场景及操作示例。对于HBase的开发人员和运维工程师来说,这些工具是日常管理和故障排查的重要手段。 ... [详细]
  • 本文详细介绍如何在VSCode中配置自定义代码片段,使其具备与IDEA相似的代码生成快捷键功能。通过具体的Java和HTML代码片段示例,展示配置步骤及效果。 ... [详细]
  • 本文详细探讨了C语言中指针的概念,特别是指针在变量和数组中的应用。通过实例讲解,帮助读者更好地掌握指针的使用方法。 ... [详细]
  • 深入理解Redis的数据结构与对象系统
    本文详细探讨了Redis中的数据结构和对象系统的实现,包括字符串、列表、集合、哈希表和有序集合等五种核心对象类型,以及它们所使用的底层数据结构。通过分析源码和相关文献,帮助读者更好地理解Redis的设计原理。 ... [详细]
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社区 版权所有