clc;
clear;
array = [69,58,90,37,92,6,28,54];
% 获取输入数组的长度
arr = array;
n = length(arr);
%画图
figure(1)
subplot(2,1,1)
b = bar((1:1:n),arr); % 绘制柱状图函数包括三个参数:柱状图横坐标、柱状图数据、柱状图宽度
for i = 1:length(arr)
text{i} = num2str(arr(i));
end
set(gca,'XTickLabel',text,'FontSize',12,'FontName','宋体'); %X轴标记设置
hold off;
pause(0.5);
%% 生成git动态图
drawnow;
F=getframe(gcf);
I=frame2im(F);
[I,map]=rgb2ind(I,256);
imwrite(I,map,'直接插入排序动图.gif','gif', 'Loopcount',inf,'DelayTime',1);
%imwrite(I,map,'直接插入排序动图.gif','gif','WriteMode','append','DelayTime',1);
%% 从第二个元素开始遍历数组
for i = 2:n
key = arr(i); % 当前待插入的元素
j = i - 1;
arr_plot = arr;
for k = 1:length(arr_plot)
text{k} = num2str(arr_plot(k));
end
% 画图
subplot(2,1,1)
arr_plot(i) = 0;
b = bar((1:1:n),arr_plot); % 绘制柱状图函数包括三个参数:柱状图横坐标、柱状图数据、柱状图宽度
set(gca,'XTickLabel',text,'FontSize',12,'FontName','宋体'); %X轴标记设置
hold off;
subplot(2,1,2)
arr_plot = zeros(1,length(arr));
arr_plot(i) = arr(i);
b = bar((1:1:n),arr_plot); % 绘制柱状图函数包括三个参数:柱状图横坐标、柱状图数据、柱状图宽度
set(gca,'XTickLabel',text,'FontSize',12,'FontName','宋体'); %X轴标记设置
ylim([0 100])
set(b,'FaceColor','r');
hold off;
pause(0.5);
%% 生成git动态图
drawnow;
F=getframe(gcf);
I=frame2im(F);
[I,map]=rgb2ind(I,256);
imwrite(I,map,'直接插入排序动图.gif','gif','WriteMode','append','DelayTime',1);
% 将比key大的元素向后移动
while (j >= 1) && (arr(j) > key)
arr(j+1) = arr(j);
% 画图
subplot(2,1,1)
arr_plot = arr;
arr_plot(j) = 0;
for k = 1:length(arr_plot)
text{k} = num2str(arr_plot(k));
end
b = bar((1:1:n),arr_plot); % 绘制柱状图函数包括三个参数:柱状图横坐标、柱状图数据、柱状图宽度
set(gca,'XTickLabel',text,'FontSize',12,'FontName','宋体'); %X轴标记设置
hold off;
subplot(2,1,2)
arr_plot = zeros(1,length(arr));
arr_plot(j) = array(i);
for k = 1:length(arr_plot)
text{k} = num2str(arr_plot(k));
end
b = bar((1:1:n),arr_plot); % 绘制柱状图函数包括三个参数:柱状图横坐标、柱状图数据、柱状图宽度
set(gca,'XTickLabel',text,'FontSize',12,'FontName','宋体'); %X轴标记设置
set(b,'FaceColor','r');
ylim([0 100])
hold off;
pause(0.5);
%% 生成git动态图
drawnow;
F=getframe(gcf);
I=frame2im(F);
[I,map]=rgb2ind(I,256);
imwrite(I,map,'直接插入排序动图.gif','gif','WriteMode','append','DelayTime',1);
j = j - 1;
end
% 插入key到正确的位置
arr(j+1) = key;
% 画图
subplot(2,1,1)
arr_plot = zeros(1,length(arr));
arr_plot(j + 1) = arr(j + 1);
for k = 1:length(arr)
text{k} = num2str(arr(k));
end
b = bar((1:1:n),arr_plot); % 绘制柱状图函数包括三个参数:柱状图横坐标、柱状图数据、柱状图宽度
set(gca,'XTickLabel',text,'FontSize',12,'FontName','宋体'); %X轴标记设置
set(b,'FaceColor','y');
hold on;
arr_plot = arr;
arr_plot(j+1) = 0;
for k = 1:length(arr)
text{k} = num2str(arr(k));
end
b = bar((1:1:n),arr_plot); % 绘制柱状图函数包括三个参数:柱状图横坐标、柱状图数据、柱状图宽度
set(gca,'XTickLabel',text,'FontSize',12,'FontName','宋体'); %X轴标记设置
hold off;
subplot(2,1,2)
arr_plot = zeros(1,length(arr));
b = bar((1:1:n),arr_plot); % 绘制柱状图函数包括三个参数:柱状图横坐标、柱状图数据、柱状图宽度
set(gca,'XTickLabel',text,'FontSize',12,'FontName','宋体'); %X轴标记设置
set(b,'FaceColor','r');
ylim([0 100])
hold off;
pause(0.5);
%% 生成git动态图
drawnow;
F=getframe(gcf);
I=frame2im(F);
[I,map]=rgb2ind(I,256);
imwrite(I,map,'直接插入排序动图.gif','gif','WriteMode','append','DelayTime',1);
end
sorted_array = arr; % 返回已排序的数组
pause(0.5);
% 画图
subplot(2,1,1)
arr_plot = arr;
for k = 1:length(arr)
text{k} = num2str(arr(k));
end
b = bar((1:1:n),arr_plot); % 绘制柱状图函数包括三个参数:柱状图横坐标、柱状图数据、柱状图宽度
set(gca,'XTickLabel',text,'FontSize',12,'FontName','宋体'); %X轴标记设置
hold off;
subplot(2,1,2)
arr_plot = zeros(1,length(arr));
b = bar((1:1:n),arr_plot); % 绘制柱状图函数包括三个参数:柱状图横坐标、柱状图数据、柱状图宽度
set(gca,'XTickLabel',text,'FontSize',12,'FontName','宋体'); %X轴标记设置
set(b,'FaceColor','r');
ylim([0 100])
hold off;
%% 生成git动态图
drawnow;
F=getframe(gcf);
I=frame2im(F);
[I,map]=rgb2ind(I,256);
imwrite(I,map,'直接插入排序动图.gif','gif','WriteMode','append','DelayTime',1);
%% 直接插入排序函数调用
% sortedArr= insertionSort(arr);
% disp("***********直接插入排序*****************************");
% disp("排序前的数组:");
% disp(arr);
% disp("排序后的数组:");
% disp(sortedArr);
function sorted_array = insertionSort(arr)
% 获取输入数组的长度
n = length(arr);
% 从第二个元素开始遍历数组
for i = 2:n
key = arr(i); % 当前待插入的元素
j = i - 1;
% 将比key大的元素向后移动
while (j >= 1) && (arr(j) > key)
arr(j+1) = arr(j);
j = j - 1;
end
% 插入key到正确的位置
arr(j+1) = key;
end
sorted_array = arr; % 返回已排序的数组
end
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
将杂乱无章的数据元素,通过一定的方法按关键字顺序排列的过程叫做排序。排序的算法有很多,常见的有冒泡排序和插入排序等。排序算法的性能通常由时间复杂度、空间复杂度和稳定性来衡量。 时间复杂度:执行算法所需的时间量,通常用大O表示法(如O(n^2)、O(n log n)等)来描述。 空间复杂度:算法执行过程中所需的额外存储空间量。 稳定性:如果排序算法能够保持相等元素的原始顺序,则称该算法是稳定的 不同的排序算法各有特点,适用于不同的场景和需求。在选择排序算法时,需要根据数据的规模、特性以及性能要求来综合考虑。 本资源通过matlab实现合并排序、简单选择排序、快速排序、冒泡排序、直接插入排序5种常用的排序算法,并部分绘制代表算法原理的动图。
资源推荐
资源详情
资源评论
收起资源包目录
排序算法.rar (19个子文件)
排序算法
直接插入排序算法
直接插入排序动图.gif 295KB
insertionSort.m 499B
main_insertionSort_git.m 6KB
main_insertionSort.m 728B
冒泡排序
冒泡动图q.gif 186KB
bubbleSort.m 402B
main_m_bubbleSort_cmp.m 498B
main_bubbleSort_gif.m 2KB
main_mbubbleSort_gif.m 2KB
mbubbleSort.m 519B
冒泡动图.gif 136KB
简单选择排序
selectionSort.m 633B
main_gif.m 5KB
简单选择排序动图.gif 151KB
main_selectionSort.m 876B
合并排序算法
main_mergeSort.m 2KB
mergeSort.m 1KB
快速排序
quicksort.m 345B
main_quicksort.m 578B
共 19 条
- 1
资源评论
>_<!
- 粉丝: 358
- 资源: 25
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- coco.names 文件
- (源码)基于Spring Boot和Vue的房屋租赁管理系统.zip
- (源码)基于Android的饭店点菜系统.zip
- (源码)基于Android平台的权限管理系统.zip
- (源码)基于CC++和wxWidgets框架的LEGO模型火车控制系统.zip
- (源码)基于C语言的操作系统实验项目.zip
- (源码)基于C++的分布式设备配置文件管理系统.zip
- (源码)基于ESP8266和Arduino的HomeMatic水表读数系统.zip
- (源码)基于Django和OpenCV的智能车视频处理系统.zip
- (源码)基于ESP8266的WebDAV服务器与3D打印机管理系统.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功