java冒泡排序经典代码_十大经典排序算法——插入排序

2900196b919920990023ef44c15fda5c.gif
vs code ppt

04bd83554df7c23c5f2b92ab7b23acdd.gif
c++ java
目录

1.1、排序分类

77a23addfa3a802be80bcde843d247e5.png

1.2、排序的定义:

对一序列对象根据某个关键字进行排序。

1.3、术语说明

稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面。

不稳定:如果a原本在b的前面,而a=b,排序之后a可能会出现在b的后面。

内排序:所有排序操作都在内存中完成。

外排序:由于数据太大,因此把数据放在磁盘中,而排序通过磁盘和内存的数据传输才能进行。

时间复杂度:一个算法执行所耗费的时间。

空间复杂度:运行完一个程序所需内存的大小。

1.4、算法总结

b05b5728277d78483d985a0b674bb5b2.png

1.5、图片名词解释

  • n: 数据规模。
  • k: “桶”的个数。
  • In-place: 占用常数内存,不占用额外内存。
  • Out-place: 占用额外内存。

1.6、比较类和非比较类的区别

(1)比较类:

1、比较类排序,通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序。

2、比较排序的优势是,适用于各种规模的数据,也不在乎数据的分布,都能进行排序。可以说,比较排序适用于一切需要排序的情况。

(2)非比较类排序:

1、不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此也称为线性时间非比较类排序。

2、非比较排序时间复杂度底,但由于非比较排序需要占用空间来确定唯一位置。所以对数据规模和数据分布有一定的要求。

c58fa85f54290530c5460d00387d479f.gif

2.1、说明:


(1)插入排序(Insertion-Sort)的算法描述是一种简单直观的排序算法。

(2)它的工作原理:是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。

(3)插入排序在实现上,需要用到O(1)的额外空间的排序,因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。

4483b6ddc9152ba082f2e72ec35fb271.gif

2.2、算法描述

它的工作原理:

1.从第一个元素开始,该元素可以认为已经被排序;

2.取出下一个元素,在已经排序的元素序列中从后向前扫描;

3.如果该元素(已排序)大于新元素,将该元素移到下一位置;

4.重复步骤3,直到找到已排序的元素小于或者等于新元素的位置;

5.将新元素插入到该位置后;

重复步骤2~5。

2.3、普通类代码(java):

e413e76b129e8b6e9b8aca075408869d.png

2.4、推导过程:

知乎视频​www.zhihu.com

2.5、以多态、泛型编程和STL实现选择排序(c++)

1a6b45ffc2b93e34db4831df9f2e9000.png
*注:#include “sort.h”头文件已经在冒泡排序2.5中展示,这里不在描述。

2.6、总结

(1) 分析时间复杂度:

1. 在最好的情况下,也就是序列有序的情况下,插入排序需要比较n-1次,时间复杂度为

2. 在最坏的情况下,插入排序需要比较

次,移动次数为
次,时间复杂度为

3. 在平均的情况下,平均比较和移动次数约为

次,时间复杂度为

虽然插入排序要用到O(1)的额外空间,但是同样是

插入排序比冒泡排序和选择排序的性能要好一点。

cfdd27a158c27eb943194891ff709411.gif
了不起的盖茨比:十大经典排序算法——冒泡排序​zhuanlan.zhihu.com
3a9ee9f346bff29b29669d9cd41017c0.png
了不起的盖茨比:十大经典排序算法——选择排序​zhuanlan.zhihu.com
d59f7b4ecabe74cecfefd71a3f9cd87b.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值