【MATLAB】排序算法

本文介绍了排序算法中的插入排序、冒泡排序和希尔排序的实现,同时讲解了稳定排序、原地排序、时间复杂度和空间复杂度的概念。通过示例代码演示了这些算法的工作过程。
摘要由CSDN通过智能技术生成

排序算法可以说是每个程序员都必须得掌握的了,相信很多读者都知道并且掌握,在此篇文章中我就列举三种排序(插入、冒泡、希尔),就得有帮助的话,也可评论,我会出其他的排序算法。


在学习之前可能有些人不知道什么是稳定排序、原地排序、时间复杂度、空间复杂度,我这里先简单解释一下:

1、稳定排序:如果 a 原本在 b 的前面,且 a b,排序之后 a 仍然在 b 的前面,则为稳定排序。

2、非稳定排序:如果 a 原本在 b 的前面,且 a b,排序之后 a 可能不在 b 的前面,则为非稳定排序。

3、原地排序:原地排序就是指在排序过程中不申请多余的存储空间,只利用原来存储待排数据的存储空间进行比较和交换的数据排序。

4、非原地排序:需要利用额外的数组来辅助排序。

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

6、空间复杂度:运行完一个算法所需的内存大小。


插入排序

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

function A = insertionSort()
% 插入排序算法
% 自动生成随机数组并排序

n = 10; % 数组大小
A = randi(100, 1, n); % 生成一个1到100的随机整数数组
disp('原始数组:');
disp(A);

for i = 2:n
    key = A(i);
    j = i - 1;
    while j > 0 && A(j) > key
        A(j + 1) = A(j);
        j = j - 1;
    end
    A(j + 1) = key;
end

disp('排序后的数组:');
disp(A);
end

冒泡排序

该算法重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。

function A = bubbleSort()
% 冒泡排序算法
% 自动生成随机数组并排序

n = 10; % 数组大小
A = randi(100, 1, n); % 生成一个1到100的随机整数数组
disp('原始数组:');
disp(A);

for i = 1:n-1
    for j = 1:n-i
        if A(j) > A(j + 1)
            temp = A(j);
            A(j) = A(j + 1);
            A(j + 1) = temp;
        end
    end
end

disp('排序后的数组:');
disp(A);
end

希尔排序

希尔排序是基于插入排序的一种算法,它允许交换距离较远的元素,从而对远距离的元素进行排序。随着算法的进展,使用的距离会逐步减小,直到仅比较相邻元素的距离,这个阶段就是简单的插入排序。

function A = shellSort()
% 希尔排序算法
% 自动生成随机数组并排序

n = 10; % 数组大小
A = randi(100, 1, n); % 生成一个1到100的随机整数数组
disp('原始数组:');
disp(A);

gap = floor(n / 2);
while gap > 0
    for i = gap+1:n
        temp = A(i);
        j = i;
        while j > gap && A(j - gap) > temp
            A(j) = A(j - gap);
            j = j - gap;
        end
        A(j) = temp;
    end
    gap = floor(gap / 2);
end

disp('排序后的数组:');
disp(A);
end

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值