• 冒泡算法(Bubble Sort)——一种计算机科学领域的较简单的排序算法

它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。走访元素的工作是重复地进行,直到没有相邻元素需要交换,也就是说该元素列已经排序完成。

这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。(实质:把小(后)的元素往前(后)调)

冒泡排序算法原理:

比较相邻的元素,如果第一个比第二个大,就交换他们两个。

对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。

针对所有的元素重复以上的步骤,除了最后一个。

持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

冒泡排序m函数(引用大佬):

function y=bubble_sort(x)
x_len=length(x);
for i=1:x_len-1
for j=1:x_len-i
if(x(j)>x(j+1))
[x(j),x(j+1)]=swap(x(j),x(j+1));
end
end
disp([num2str(i),'.Sort:x=',num2str(x)]);
end
y=x;
end
function [a,b]=swap(x,y)
a=y;
b=x;
end

测试代码:

clc;
clear;
X=[2,6,8,9,17,3,4,5,-3];
disp(['Before Sort:X=',num2str(X)]);
disp('--------------------');
y=bubble_sort2(X);
disp(['Bubble Sort:x=',num2str(y)]);

结果如图:

二、快速排序(Quicksort)——将无序序列排成有序(非递减)序列。

快速排序算法通过多次比较和交换来实现排序,其排序流程如下:

(1)首先设定一个分界值,通过该分界值将数组分成左右两部分。

(2)将大于或等于分界值的数据集中到数组右边,小于分界值的数据集中到数组的左边。此时,左边部分中各元素都小于分界值,而右边部分中各元素都大于或等于分界值。

(3)然后,左边和右边的数据可以独立排序。对于左侧的数组数据,又可以取一个分界值,将该部分数据分成左右两部分,同样在左边放置较小值,右边放置较大值。右侧的数组数据也可以做类似处理。

(4)重复上述过程,可以看出,这是一个递归定义。通过递归将左侧部分排好序后,再递归排好右侧部分的顺序。当左、右两个部分各数据排序完成后,整个数组的排序也就完成了。

快速排序m函数程序(含注释):

function data =QuickSort(data,start,endadd) %定义函数名,与函数返回值
if start >= endadd %退出递归的条件
return
end
if start < endadd %当递归条件符合时
key = data(start); %第一个数据作为键值
i = start; %将起始位置作为i。从i位置开始向右遍历
j = endadd; %将结束位置作为j。从j位置开始向左遍历
while i ~= j %当i与j未重合时,即分别在key值的左右两半时
while (i<j) && (data(j) >= key) %当i值小于j值,且此时j位置大于key值时
j = j-1; %则此j位置值置于key值右边为正确的,遍历下一个
end
data(i) = data(j); %当找到data[j]比key值小时,退出上述while循环,将找到的比key值小的j位置值赋值给i位置
while (i<j) && (data(i) <= key) %同样道理,当i值小于j值,且此时j位置小于key值时
i = i+1; %则此i位置值置于key值左边为正确的,遍历下一个值
end
data(j) = data(i); %当找到data[i]比key值大时,退出上述while循环,将找到的比key值大的i位置值赋值给j位置
end
%上述遍历后,i与j重合,重合位置即为key值正确位置,比其小的都在左边,比其大的元素都在右边
data(i) = key;
data =QuickSort(data,start,j-1);%同样的办法,遍历key值左半部分的
data =QuickSort(data,i+1,endadd);%遍历key值右半部分
end

测试代码:

clc
clear
close alldata=randperm(20); %数据内容   (这里我们取随机20的数,也可固定值,例:(data=[-33,23,1,3,8,9]))
start=1; %起始位置,在matlab中,数组元素位置从1开始
endadd=size(data,2);disp('未排序的序列为:'); %打印文字
disp(data); %打印未排序的序列data=QuickSort(data,start,endadd); %将数据进行快速排序disp('快速排序之后的序列为:');%打印文字
disp(data); %打印快速排序后的序列

结果如图:

MATLAB实现冒泡排序算法和快速排序算法相关推荐

  1. linux公社 java算法_Java快速排序算法

    快速排序算法思想: 快速排序(Quicksort)是对冒泡排序的一种改进. 快速排序由C. A. R. Hoare在1962年提出.它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一 ...

  2. 【算法】快速排序算法原理及实现

    1.什么是快速排序算法 快速排序是对冒泡排序的一种改良版,通过一趟排序,把要排序的序列分割成两个部分,一部分的所有数据要比另一部分的数据都小,然后再根据这两部分的数据来进行快速排序.以此来达到整一个数 ...

  3. 【算法】快速排序算法的编码和优化

    参考资料 <算法(第4版)>          - - Robert Sedgewick, Kevin Wayne <啊哈! 算法>              - - 啊哈磊 ...

  4. 【大话数据结构算法】快速排序算法

    快速排序是交换类的排序,比如在站队的时候,老师说:"第一个同学出列,其他同学以第一个同学为中心,比他矮的全排在左边,比他高的全排在右边."这就是一趟快速排序.可以看出,一趟快速排序 ...

  5. 排序算法:快速排序算法实现及分析(递归形式和非递归形式)

    快速排序算法介绍 从名字上就可以看出快速排序算法很嚣张,直接以快速命名.确实快速排序 的确很快速,被列为20世纪十大算法之一.程序员难道不应该掌握么.快速排序(Quick Sort)的基本思想是:通过 ...

  6. 十大排序算法:快速排序算法

    一.快速排序算法思想或步骤 分解: 数组A[p-r]被划分为两个子数组A[p-q-1]和A[q+1-r],使得A[q]为大小居中的数,左侧A[p-q-1]中的每个元素都小于等于它,而右边A[q+1-r ...

  7. 图解排序算法之快速排序算法

    精心整理的快速排序,并配图加代码,方便理解,实属不易,但是难免不了存在纰漏,感谢大家的指正与理解!觉的写的不错的小伙伴儿,一键三连支持一下,后期会有持续更新!!抱拳了罒ω罒 1. 算法思路 1.先从数 ...

  8. 使用php描述快速排序算法,PHP描述冒泡排序和快速排序算法

    使用PHP描述冒泡排序和快速排序算法,对象可以是一个数组. 使用PHP描述顺序查找和二分查找(也叫做折半查找)算法,顺序查找必须考虑效率,对象可以是一个有序数组. 写一个二维数组排序算法函数,能够具有 ...

  9. 图解快排——快速排序算法(quick sort)

    快速排序 quick sort 算法思想 算法图解 算法实现(C语言) 性能分析 算法思想 快速排序算法是对冒泡排序算法的一种改进算法,在当前所有内部排序算法中,快速排序算法被认为是最好的排序算法之一 ...

最新文章

  1. Java 7代码层面上的更新
  2. flink 三种时间机制_360深度实践:Flink 与 Storm 协议级对比
  3. 2020 mse 清华_ICSMSE 2020
  4. matlab怎么实现循环,matlab怎么实现直到型循环
  5. python干啥用_用python内置函数能干些什么?
  6. Vue -- 项目报错整理(1):RangeError: Maximum call stack size exceeded
  7. deepin启动盘无法引导安装_deepin 无法启动问题解决
  8. JVM学习系列之对象访问的两种方式句柄和直接指针
  9. Android layoutInflate.inflate 方法具体解释,removeView()错误解决
  10. ENVI 遥感图像监督分类概述
  11. (二三)计算机组成原理笔记整理之系统总线(总线判优方式,标准传输率,数据总线,地址总线与MDR,MAR的关系等)
  12. fme坐标转换器_FME坐标点提取
  13. STM32中GPIO工作原理详解
  14. 课程笔记《李彦宏·智能交通7讲》
  15. 百年IBM:值得全球商界研究的转型变革典范
  16. Unity导弹,射击
  17. excel 一列的数据除以另一列
  18. 朋友圈评论发html,微信评论怎么发图片(微信朋友圈评论可以发表情包啦)
  19. 关于鸿蒙系统 JS UI 框架源码的分析
  20. 教你十步实现内网穿透

热门文章

  1. 转录组组装软件--Bridger安装使用和报错解决方案
  2. Chapter1:控制系统数学模型(下)
  3. Centos7 使用rsync 实现多服务器文件同步
  4. Retrofit2-源码解析,kotlin协程android
  5. webrtc 音频编解码器代码路径
  6. Scrapy使用报错socket.timeout: timed out
  7. 解决错误 fatal error C1010: unexpected end of file while looking for precompiled head
  8. android 人脸识别踩坑实录
  9. 微机原理与接口技术【2】
  10. Linux系统运行时参数命令