首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

详解排序算法--插入排序和冒泡排序插入排序和冒泡排序分析

冒泡排序 插入排序 插入排序和冒泡排序分析 冒泡排序 Paste_Image.png 冒泡排序(英语:Bubble Sort,中国台湾另外一种译名为:泡沫排序)是一种简单的排序算法...尽管这个算法是最简单了解和实现的排序算法之一,但它对于包含大量的元素的数列排序是很没有效率的。 冒泡排序算法的运作如下: 比较相邻的元素。如果第一个比第二个大,就交换他们两个。...该算法可以认为是插入排序的一个变种,称为二分查找插入排序。...left && a[j-1] > temp;j--) a[j] = a[j-1]; a[j] = temp; } } } 插入排序和冒泡排序分析...给定初始序列{34, 8, 64, 51,32, 21},冒泡排序和插入排序分别需要多少次元素交换才能完成?

60210
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    排序算法(冒泡,插入),希尔排序(插入升级),希尔排序和插入排序时间比较!

    ♂️思路分析: 插入排序有点像我们打扑克牌,打扑克牌的时候,我们每拿一张牌,我们就会去和每一个进行比对,然后放在正确位置,让新拿到的牌和原来有序的序列变成新的有序的序列。...⛳️多趟理解: 只需要从[0,0]开始,插入n-1个元素就完成了排序。 ‍...num[end + 1] = num[end]; --end; } else break; } num[end + 1] = tmp; } } ‍♂️冒泡排序和插入排序的比较...(每趟基本都是最坏) 2.但是插入排序,可以移动几个数,然后插入进去,插入位置前面的数就不要移动,这样就比冒泡排序的适应性更强。...= num[end]; end -= gap; } else break; } num[end + gap] = tmp; } } } 四.验证插入排序和希尔排序的实际实际比较

    9310

    插入排序和希尔排序(Java)

    ,只需要找到插入的位置即可 实现代码: /** * 插入排序 * * @param nums */ public void insertSort...nums[j] = target; } } 希尔排序:观察插入排序发现如果数组已经有一定的排列了,那么插入排序性能会很高,例:0 2 3 4 1 排序,...希尔排序加入了步长,而不是一开始就从头进行插入排序,目的是将数组进行一定的排序,最后再用插入排序进行排序,性能比直接使用插入排序快 shellSort.png 实现代码: /** *...nums[j] = target; } } } 为了对比直接插入排序和希尔排序的区别,我加入了一个变量来计数挪位操作的次数...:" + count[0]); 结果: 0 1 1 3 4 5 6 7 8 9 插入排序交换次数:21 0 1 1 3 4 5 6 7 8 9 以步长4先进行希尔排序后排序的交换次数:15

    36120

    C语言排序(冒泡排序、选择排序、插入排序和快速排序)

    C语言排序(冒泡排序、选择排序、插入排序和快速排序) C语言排序 什么是排序?...1.冒泡排序 基本思想 主要思路: demo 2.选择排序 基本思想 主要思路 demo 3.插入排序 基本思想 主要思路 demo 4.快速排序 基本思想 主要思路 demo C语言排序 什么是排序?...就是将无序的变成有序的 1.冒泡排序 基本思想 在要排序的一组数中,对当前还未排好序的范围内的全部数,自上而下对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。...基本思想 将待排序的无序数列看成是一个仅含有一个元素的有序数列和一个无序数列,将无序数列中的元素逐次插入到有序数列中,从而获得最终的有序数列。...主要思路 插入排序是最简单常用的方法,将数组分为两部分,排好序的数列,以及未排序的数列,将未排序的数列中的元素 与排好序的数列进行比较,然后将该元素插入到已排序列的合适位置中。

    1.6K30

    【数据结构】插入排序和希尔排序

    插入排序思路 把待排序的记录按其关键码值的⼤⼩逐个插 ⼊到⼀个已经排好序的有序序列中,直到所有的记录插⼊完为⽌,得到⼀个新的有序序列。...直接插入排序思路 直接插入排序的步骤如下: 从第二个元素开始,将其视为待插入元素。 比较待插入元素与其前面已排序序列中的元素。 如果待插入元素小于比较的元素,则将比较的元素向后移动一位。...1.元素集合越接近有序,直接插⼊排序算法的时间效率越⾼ 2.时间复杂度:O(N^2) 3.空间复杂度:O(1) 希尔排序思路 希尔排序法,又称缩小增量排序法,是直接插入排序算法的改进版。...将待排序记录分成若干组,每组内记录的距离相等。 对每组记录进行插入排序。 缩小增量:gap = gap/3 + 1。 重复步骤 2-4,直到 gap = 1,此时相当于直接插入排序。...这种方法通过分组和逐步缩小增量的方式,提高了排序效率。综合来看,希尔排序的效率明显高于直接插入排序算法。

    7410

    直接插入排序和希尔排序

    概述 直接插入排序是一种简单的插入排序法,其基本思想是:把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序列 。...现实生活中,打扑克牌就是一个插入排序的例子 直接插入排序 本质 设一个待排序的数组,a[1]是一个有序的序列 将后面的元素和已经排序好的元素进行比较。...将end和tmp进行比较,显然3<6,即tmp<end 此时将tmp拿出来,将end移动到tmp位置 end继续往前移动,继续和tmp比较 此时依然tmp排序序列分割成几组,从而减少参与直接插入排序的数据量,对每组放分别进行直接插入排序,然后增加每组的数据量,重新分组。...,红色的序列为9 6 4 1,进行直接插入排序,即1 4 6 9 然后对蓝色的一组排序,蓝色的序列为8 6 3 0,进行直接插入排序,即0 3 6 8 最后对绿色的一组排序,绿色的序列为7 5 2,进行直接插入排序

    12010

    #算法基础#选择和插入排序

    算法是基础,小蓝同学准备些总结一系列算法分享给大家,这是第二篇《选择和插入排序》,非常赞!希望对大家有帮助,大家会喜欢!...系列文章: 由快速排序到分治思想 一、选择排序 这是一种最简单的排序算法 第一步他先找到数组中最小的元素,然后将它和本数组中第一个元素交换位置。然后把剩下的n-1个数算为一个数组。...exch(a, i, min); //交换 } } } 特性: 时间复杂度:N² 空间复杂度:N 多索引的稳定性:不稳定 应用: 程序员的日常 二、插入排序...而插入排序的特点就和抓牌时候是一样一样的。 你先从一大堆数组中抓起一个 然后再抓起一个按大小排序。在抓起一个按大小插进去 。。。。。。。。。。。好了 你手上就是一个理好的牌(数组)了。...这就是插入排序。就是这么简单。

    72760

    Python 算法基础篇:插入排序和希尔排序

    Python 算法基础篇:插入排序和希尔排序 引言 插入排序和希尔排序是两种常用的排序算法,用于将一个无序列表按照特定顺序重新排列。...本篇博客将介绍插入排序和希尔排序的基本原理,并通过实例代码演示它们的应用。 ❤️ ❤️ ❤️ 1. 插入排序算法概述 插入排序是一种简单直观的排序算法,它将列表分成已排序部分和未排序部分。...插入排序将列表分成已排序部分和未排序部分,在每次遍历时,将未排序部分的第一个元素插入到已排序部分的适当位置。通过使用 while 循环找到正确的插入位置,实现了插入排序算法。 3....插入排序与希尔排序的对比 插入排序和希尔排序都是通过插入元素到已排序部分来完成排序,但希尔排序在插入排序的基础上进行了改进。...虽然希尔排序相对于插入排序有所改进,但在处理大规模数据时仍然不如快速排序和归并排序等高效的排序算法。 总结 本篇博客介绍了插入排序和希尔排序两种排序算法。

    10100

    直接插入排序和直接选择排序

    排序过程的某一中间时刻,R 被划分成两个子区间 R[1..i-1](有序区)和 R[i..n](无序区)。...如果目标是把n个元素的数列升序排列,那么采用插入排序存在最好情况和最坏情况。最好情况就是,序列已经是升序排列了,在这种情况下,需要进行的比较操作需(n-1)次即可。...直接选择排序 选择排序的基本思想是:每一趟从待排序的记录中选出关键字最小的记录,顺序放入已排序数列的最后,直到全部记录排序完毕。常用的选择排序方法有直接选择排序和堆排序。...(3)第 i 趟排序:第i趟排序开始时,当前有序区和无序区分别为 R[1..i-1]和 R[i..n][1≤i≤n-1]。...该趟排序从当前无序区中选出关键字最小的记录 R[k],将它与无序区的第 i 个记录 R[i]交换,使 R[1..i]和 R[i+1..n]分别变为记录个数增加 1 个的新有序区和记录个数减少 1 个的新无序区

    3.6K10

    排序算法Java代码实现(三)—— 插入排序 和 希尔排序

    因为希尔排序的核心思想是插入排序,所以本篇将两篇排序一起记录 本篇内容: 插入排序 希尔排序 (一)插入排序 算法思想: 把n个待排序的元素看成一个有序表和一个无序表,开始时有序表中只有一个元素,无序表中有...n-1个元素; 排序过程即每次从无序表中取出第一个元素,将它插入到有序表中,使之成为新的有序表,重复n-1次完成整个排序过程。...printArray(array); insertSorting(array); printArray(array); } /* * 把n个待排序的元素看成一个有序表和一个无序表...,开始时有序表中只有一个元素,无序表中有n-1个元素; * 排序过程即每次从无序表中取出第一个元素,将它插入到有序表中,使之成为新的有序表,重复n-1次完成整个排序过程。...,再对全体元素进行一次直接插入排序。

    42320

    基础和常用的排序算法:冒泡排序,选择排序,插入排序,快速排序

    选择排序的特点 不是稳定的排序算法。 原地排序。 插入排序 什么是插入排序? 插入排序是一种简单直观的排序算法。...它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。 工作原理 从第一个元素开始,该元素可以认为已经被排序。...取出下一个元素,在已经排序的元素序列中从后向前扫描。 如果已排序元素大于新元素,将该元素移到下一位置。 重复步骤3,直到找到已排序的元素小于或等于新元素的位置。 将新元素插入到该位置。...对基准左右的两个子数组递归执行步骤1和2,直到子数组的大小是零或一。 总结 以上就是四种常用的排序算法的简单介绍,包括冒泡排序、选择排序、插入排序和快速排序。...这些算法在计算机科学和编程中都有广泛的应用,并且是很多更复杂算法的基础。 每种算法都有其特点和使用场景,了解和掌握它们有助于更好地解决排序和数据组织的问题。

    23830

    经典排序算法和python详解(二):冒泡排序、双向冒泡排序、插入排序和希尔排序

    经典排序算法和python详解(二):冒泡排序、双向冒泡排序、插入排序和希尔排序 内容目录 一、冒泡排序(Bubble Sort)二、冒泡排序法改进三、双向冒泡排序法四、插入排序五、希尔排序(插入排序改进...双向冒泡排序法由两个方向同时进行冒泡,首先由左向右为大元素移动方向,从右向左为小元素移动方向,然后每个元素都依次执行。在第i次移动后,前i个和后i个元素都放到了正确的位置。...四、插入排序 插入排序是一种最简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。...插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2)。是稳定的排序方法。...五、希尔排序(插入排序改进) 插入排序在顺序以及比较好的情况下效率高,但其大部分情况是低效率的,因为每次智能移动一位数字,希尔排序(Shell's Sort)是插入排序的一种又称“缩小增量排序”(Diminishing

    1.5K30

    算法导论之插入排序和归并排序

    当然了,本人在算法方面水平有限,这不正在努力的学习不是,接下来就按算法导论上描述的插入排序和归并排序使用Objective-C语言实现一下,当然用什么语言是次要的,关键是理解算法才是关键。   ...在Sort类中我们写了关于排序的一些类方法,然后在main函数中进行调用。 ?   二、插入排序     插入排序顾名思义,就是把无序的元素插入到有序的元素当中。...《算法导论》中举了一个特为形象的例子,插入排序就如同你在打扑克时摸牌一样,手里的牌是有序的,而你刚摸得牌是是随机的,需要你插入到已经排好序的扑克牌中,这就是插入排序。     ...如果用代码实现的话就是每经过一轮插入排序后,前面有序的元素就会加一,而后面无序的元素就会减一。下面根据Demo的实例来说明一下插入排序的思路和具体实现方式。     ...[array addObject:temp]; 7 }   进入测试阶段,调用displayArrayWithArray方法,打印随机生成的原始数组,然后调用插入排序

    77470

    排序算法之冒泡、插入、快排和选择排序

    * 将n个元素的数列分为已有序和无序两个部分,如插入排序过程示例下所示:    * {{a1},{a2,a3,a4,…,an}}    * {{a1⑴,a2⑴},{a3⑴,a4⑴ …,an⑴}}...插入排序是一种罪简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描, 找到相应位置并插入....算法步骤 : 1: 将第一待排序序列第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是末排序序列. 2: 从头到尾依次扫描未排序序列,将扫描到的每个元素插入有序序列的适当位置....: * 把第一个元素依次和后面的所有元素进行比较。...3 递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。 递归的最底部情形,是数列的大小是零或一,也就是永远都已经被排序好了。

    31300

    Spring 全家桶之 Spring Data JPA(五)

    值得值中间表的主键,referencedColumnName当前类对应表的主键 inverseJoinColumns:对方对象在中间表的外键 */ @ManyToMany(targetEntity...中间表没有插入数据,user和role关联关系没有建立成功 新增testSave0()方法,在user一侧建立用户到角色的关联关系 @Test @Transactional @Rollback(false...查看数据库表,3张表中都有数据,user和role关联关系建立 同时在user和role两侧建立关联关系 @Test @Transactional @Rollback(false) public...insert操作时表中已经存在了user插入的数据,所以出现了主键冲突的报错 因此需要user和role一方放弃维护权,修改Role实体类中关联关系,mappedBy是指role在对方表的属性名称...insert操作 数据库表中成功插入数据 测试级联删除 @Test @Transactional @Rollback(false) public void testCascadeDelete(

    2.1K20

    【数据结构与算法】插入排序和希尔排序

    一.插入排序 InsertSort 基本思想 把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序列 。...当插入第i(i>=1)个元素时,前面的arr[0],arr[1],…,arr[i-1]已经排好序,此时用arr[i]的排序码与arr[i-1],arr[i-2],…的排序码顺序进行比较,找到插入位置即将...元素集合越接近有序,直接插入排序算法的时间效率越高; 2....ShellSort 基本思想 希尔排序分为预排序(即分组插排,让数组接近有序)和直接插入排序; 希尔排序是把数据分成gap组,每隔gap距离的属于一组数据,对每一组内的数据进行插入排序,这样就可以让整体数据更接近有序状态...希尔排序是对直接插入排序的优化; 2. 当gap > 1时都是预排序,目的是让数组更接近于有序。当gap == 1时,数组已经接近有序的了,这样就会很快。这样整体而言,可以达到优化的效果。

    11510
    领券