matlab 冒泡排序算法,排序算法一:冒泡排序,插入排序以及选择排序原理与MATLAB实现...
冒泡排序
冒泡排序 思想
这个方法就是在每一趟的循环中依次比较前后两个元素之间的大小,然后进行一个交换。这样在多趟循环中实现无序数列的有序排列。下面是使用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实现...相关推荐
- 内部排序算法的实现(插入排序、选择排序、交换排序、归并排序、计数排序)
目录 插入排序 直接插入排序 希尔排序 选择排序 直接选择排序 堆排序 交换排序 冒泡排序 快速排序(递归) 三数取中 快速排序(hoera版) 快速排序(挖坑版) 快速排序(前后指针版) 快速排序非 ...
- 排序算法:冒泡排序、插入排序、选择排序、希尔排序
相关博客: 排序算法:冒泡排序.插入排序.选择排序.希尔排序 排序算法:归并排序.快速排序 排序算法:桶排序.计数排序.基数排序 排序算法:堆排序 十大排序算法小结 一.冒泡排序: 1.算法原理: 冒 ...
- 数据结构与算法:冒泡排序、插入排序、选择排序
排序算法太多了,有很多可能你连名字都没听说过,比如猴子排序.睡眠排序.面条排序等.本文只众多排序算法中的一小撮,也是最经典的.最常用的:冒泡排序.插入排序.选择排序.归并排序.快速排序.计数排序.基数 ...
- 【排序综合】直接插入排序,希尔排序,快速排序,堆排序,冒泡排序,简单选择排序的简介,实现和算法复杂度分析
目录 1. 直接插入排序 1.1 直接插入排序简介 1. 什么是直接插入排序 2. 排序思想 1.2 排序实现 1. 排序代码 2. 复杂度分析: 3. 运行结果: 1.3 学习链接 2. 希尔排序( ...
- 数据结构——排序:插入排序、选择排序、交换排序、归并排序、基数排序
排序 内部排序:数据量不大,在内存中可以完成排序. 外部排序:借助外存.把数据文件分成若干块,涉及内外存数据的转换.存储器的管理等. 稳定排序:能保证排序前两个相等的数其在序列的前后位置顺序和排序后它 ...
- 插入排序、选择排序、快速排序以及归并排序(附Python代码)
排序算法基本原理以及复杂度等知识点可跳转至该博客了解https://www.cnblogs.com/onepixel/p/7674659.html ,本博客主要对排序算法性能进行对比以及记录对比过程发 ...
- ds排序--希尔排序_图解直接插入排序和希尔排序
前言 这次我们介绍插入类排序中的 直接插入排序 和 希尔排序 . 对于直接插入排序,虽然它的时间复杂度也是 O(n^2) ,但是在元素 有序或近乎有序 的情况下,时间复杂度可以降为 O(n) ,效率比 ...
- [数据结构]用插入排序和选择排序的思想实现优先级队列
一.问题概述 优先级队列的定义: 优先级队列不同于普通的队列,普通的队列具有先进先出的原则,而优先级队列是选择优先级最高的先出队.那么,如何模拟实现优先级队列呢?在这里,我们将较大的值作为优先级较高的 ...
- 请插入多卷集的最后一张磁盘_聊一聊插入排序和选择排序
简介 插入排序和比较排序是排序算法中比较基础和简单的两种,其时间复杂度均为 ,在分析算法时间复杂度时,我们往往会只会分析比较开销,但是交换开销也确实存在.这里我将综合比较开销和交换开销,来分析一下插入 ...
- SVPWM仿真和基于DSP28335的PIL(处理器在环) 仿真模型(将matlab仿真算法生成代码在DSP中在线运行返回数据给Matlab)验证算法可行性和实时性
SVPWM仿真和基于DSP28335的PIL(处理器在环) 仿真模型(将matlab仿真算法生成代码在DSP中在线运行返回数据给Matlab)验证算法可行性和实时性. 对于数字信号处理很有用. ID: ...
最新文章
- 计蒜客 挑战难题 爬楼梯
- 【重复制造精讲】2、主数据介绍
- matlab平面绘图命令
- ldap接触(1)之如何把安全证书导入到java中的cacerts证书库
- 实用技巧:使用 Google Analytics 跟踪 JS 错误
- java 数据结构 迷宫_JAVA数据结构与算法之递归(一)~ 迷宫问题
- HTML 最常用的标记
- 线程安全的三大不安全案例以及解决方法
- PTA:编程题:7-1 一元多项式的乘法与加法运算 (20 分)
- Nginx源码编译及安装
- MATLAB DBSCAB简介
- 2022年上半年信息系统项目管理师下午案例分析真题及答案解析
- 一个免费ss网站的数据爬取过程
- matlab 狼追兔子,数学模型--狼追击兔子的问题.doc
- Vector CANoe Option Car2X利用Car2X场景编辑器创建车联网交通场景与应用示例剖析
- Apollo6.0_ReferenceLine_Smoother解析与子方法对比
- 安装双系统后,将windows设置为默认启动选项的方法
- 大学的计算机社团都学什么,大学有什么好玩的社团 大学生必入的5个社团
- css边距和填充示例代码,css 内外边距(示例代码)
- 档案馆中温湿度要求的数据 资料分享