冒泡排序

冒泡排序 思想

这个方法就是在每一趟的循环中依次比较前后两个元素之间的大小,然后进行一个交换。这样在多趟循环中实现无序数列的有序排列。下面是使用matlab实现的

eg:冒泡算法的原理是:根据轻气泡不能在重气泡之下的原则,按一定顺序扫描数组:凡扫描到违反本原则的轻气泡,就使其向上"飘浮"。如此反复进行,直到最后任何两个气泡都是轻者在上,重者在下为止。到此排序结束。

比如对{6,2,3,1,7}进行冒泡排序(从小到大)

第一次遍历结束后,结果为:1 6 3 2 7

第二次遍历结束后,结果为:1 2 6 3 7

第三次遍历结束后,结果为:1 2 3 6 7

第n此遍历结束后,数组的前n个数字组成的子序列是有序的。

clc

clear

close

% aa=round(rand(1,100000)*500000000) ;%产生随机数组

% a=aa;

a=[0 6,5,3,1,8,7,2,4];

N=size(a,2);

for i=1:N

for j=1:N-i

if a(1,j)>a(1,j+1)

temp=a(1,j);

a(1,j)=a(1,j+1);

a(1,j+1)=temp;

end

end

end

算法时间复杂度分析

从上面的代码可以看出来,外层循环也就是趟数最多为N−1N−1次,而内层循环比较次数最多为NN次,最少为1次,所以平均

次数为N+12N+12次,所以总的次数为T(n)=(N−1)×N+12=N2−12T(n)=(N−1)×N+12=N2−12次,所以其算法时间复杂 度为O(n2)O(n2).

冒泡改进

有时候碰到的序列里面有大部分是有序,只有少数的无序的,那么有可能就不需要比较那么多趟去实现这个冒泡,因此,可以设置一个旗帜变量exchangeFlag,发生元素交换了,则exchangeFlag=1,否则为0.

那么改进之后的代码为:

exchangeFlag=true;

tic

for i=1:m

exchangeFlag=0

for j=1:m-i

if a(1,j)>a(1,j+1)

temp=a(1,j);

a(1,j)=a(1,j+1);

a(1,j+1)=temp;

exchangeFlag=1

end

end

if ~exchangeFlag

break;

end

end

这里就有一个旗帜变量,进行一个统计是否发生了元素交换。这样的当一个序列里面大部分有序,只有少数无序的时候就比较使用,不要去试行N−1N−1趟的比较了。

Python 实现

for i in range(0,m):

exchangeFlag=0

for j in range(0,m-i-1):

if a[j]>a[j+1]:

a[j],a[j+1]=a[j+1],a[j]

exchangeFlag=1

if ~exchangeFlag:

break

print(a)

插入排序

插入排序的思想

插入排序是在一个已经有序的小序列的基础上,一次插入一个元素。当然,刚开始这个有序的小序列只有1个元素,就是第一个元素。比较是从有序序列的末尾开始,也就是想要插入的元素和已经有序的最大者开始比起,如果比它大则直接插入在其后面,否则一直往前找直到找到它该插入的位置。如果碰见一个和插入元素相等的,那么插入元素把想插入的元素放在相等元素的后面。所以,相等元素的前后顺序没有改变,从原无序序列出去的顺序就是排好序后的顺序,所以插入排序是稳定的。

matlab代码

clc

clear

close all

a=[6 5 3 1 8 7 2 4 -1];

m=size(a,2);

tic

for i=2:m

if a(1,i)

j=i-1; %记录这个位置

temp=a(i); %将这个位置的元素值取出来

a(i)=a(i-1); %将大的元素后移

while (j-1)>0 %这里实现待插入的元素和已排好序列进行比较

if temp

matlab 冒泡排序算法,排序算法一:冒泡排序,插入排序以及选择排序原理与MATLAB实现...相关推荐

  1. 内部排序算法的实现(插入排序、选择排序、交换排序、归并排序、计数排序)

    目录 插入排序 直接插入排序 希尔排序 选择排序 直接选择排序 堆排序 交换排序 冒泡排序 快速排序(递归) 三数取中 快速排序(hoera版) 快速排序(挖坑版) 快速排序(前后指针版) 快速排序非 ...

  2. 排序算法:冒泡排序、插入排序、选择排序、希尔排序

    相关博客: 排序算法:冒泡排序.插入排序.选择排序.希尔排序 排序算法:归并排序.快速排序 排序算法:桶排序.计数排序.基数排序 排序算法:堆排序 十大排序算法小结 一.冒泡排序: 1.算法原理: 冒 ...

  3. 数据结构与算法:冒泡排序、插入排序、选择排序

    排序算法太多了,有很多可能你连名字都没听说过,比如猴子排序.睡眠排序.面条排序等.本文只众多排序算法中的一小撮,也是最经典的.最常用的:冒泡排序.插入排序.选择排序.归并排序.快速排序.计数排序.基数 ...

  4. 【排序综合】直接插入排序,希尔排序,快速排序,堆排序,冒泡排序,简单选择排序的简介,实现和算法复杂度分析

    目录 1. 直接插入排序 1.1 直接插入排序简介 1. 什么是直接插入排序 2. 排序思想 1.2 排序实现 1. 排序代码 2. 复杂度分析: 3. 运行结果: 1.3 学习链接 2. 希尔排序( ...

  5. 数据结构——排序:插入排序、选择排序、交换排序、归并排序、基数排序

    排序 内部排序:数据量不大,在内存中可以完成排序. 外部排序:借助外存.把数据文件分成若干块,涉及内外存数据的转换.存储器的管理等. 稳定排序:能保证排序前两个相等的数其在序列的前后位置顺序和排序后它 ...

  6. 插入排序、选择排序、快速排序以及归并排序(附Python代码)

    排序算法基本原理以及复杂度等知识点可跳转至该博客了解https://www.cnblogs.com/onepixel/p/7674659.html ,本博客主要对排序算法性能进行对比以及记录对比过程发 ...

  7. ds排序--希尔排序_图解直接插入排序和希尔排序

    前言 这次我们介绍插入类排序中的 直接插入排序 和 希尔排序 . 对于直接插入排序,虽然它的时间复杂度也是 O(n^2) ,但是在元素 有序或近乎有序 的情况下,时间复杂度可以降为 O(n) ,效率比 ...

  8. [数据结构]用插入排序和选择排序的思想实现优先级队列

    一.问题概述 优先级队列的定义: 优先级队列不同于普通的队列,普通的队列具有先进先出的原则,而优先级队列是选择优先级最高的先出队.那么,如何模拟实现优先级队列呢?在这里,我们将较大的值作为优先级较高的 ...

  9. 请插入多卷集的最后一张磁盘_聊一聊插入排序和选择排序

    简介 插入排序和比较排序是排序算法中比较基础和简单的两种,其时间复杂度均为 ,在分析算法时间复杂度时,我们往往会只会分析比较开销,但是交换开销也确实存在.这里我将综合比较开销和交换开销,来分析一下插入 ...

  10. SVPWM仿真和基于DSP28335的PIL(处理器在环) 仿真模型(将matlab仿真算法生成代码在DSP中在线运行返回数据给Matlab)验证算法可行性和实时性

    SVPWM仿真和基于DSP28335的PIL(处理器在环) 仿真模型(将matlab仿真算法生成代码在DSP中在线运行返回数据给Matlab)验证算法可行性和实时性. 对于数字信号处理很有用. ID: ...

最新文章

  1. 计蒜客 挑战难题 爬楼梯
  2. 【重复制造精讲】2、主数据介绍
  3. matlab平面绘图命令
  4. ldap接触(1)之如何把安全证书导入到java中的cacerts证书库
  5. 实用技巧:使用 Google Analytics 跟踪 JS 错误
  6. java 数据结构 迷宫_JAVA数据结构与算法之递归(一)~ 迷宫问题
  7. HTML 最常用的标记
  8. 线程安全的三大不安全案例以及解决方法
  9. PTA:编程题:7-1 一元多项式的乘法与加法运算 (20 分)
  10. Nginx源码编译及安装
  11. MATLAB DBSCAB简介
  12. 2022年上半年信息系统项目管理师下午案例分析真题及答案解析
  13. 一个免费ss网站的数据爬取过程
  14. matlab 狼追兔子,数学模型--狼追击兔子的问题.doc
  15. Vector CANoe Option Car2X利用Car2X场景编辑器创建车联网交通场景与应用示例剖析
  16. Apollo6.0_ReferenceLine_Smoother解析与子方法对比
  17. 安装双系统后,将windows设置为默认启动选项的方法
  18. 大学的计算机社团都学什么,大学有什么好玩的社团 大学生必入的5个社团
  19. css边距和填充示例代码,css 内外边距(示例代码)
  20. 档案馆中温湿度要求的数据 资料分享

热门文章

  1. 通讯录最终版——动态存储+文件处理
  2. 魔众题库系统 v6.4.0 题目导入优化 自动阅卷优化 后台菜单快捷搜索
  3. 在线排查内存泄漏的步骤
  4. Restful风格的请求
  5. qdir 类似工具_如何高效率整理电脑上的文件 ?
  6. Excel的一些操作:移动列,添加索引
  7. drawRect消耗大量内存详解
  8. Mactalk里的池建强,约你来吗?
  9. go的time.Time格式相关转换
  10. 爬山算法matlab程序,爬山算法和模拟退火算法