排序算法及MATLAB实现课件_第1页
排序算法及MATLAB实现课件_第2页
排序算法及MATLAB实现课件_第3页
排序算法及MATLAB实现课件_第4页
排序算法及MATLAB实现课件_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

排序算法.排序例:对1、9、6、11、3这5个数字进行从小到大排序?结果:1、3、6、9、11思考:如何编程让计算机完成排序??.排序算法的种类:1、冒泡排序(BubbleSort)2、选择排序(SelectionSort)3、插入排序(InsertionSort)4、希尔排序(ShellSort)5、归并排序(MergeSort)6、快速排序(QuickSort)7、堆排序(HeapSort)8、计数排序(CountingSort)9、桶排序(BucketSort)10、基数排序(RadixSort).1、冒泡排序原理:重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。.1、冒泡排序例:对1、9、6、11、3这5个数字进行从小到大排序?冒泡排序:(1)1、6、9、11、3(2)1、6、9、3、11(3)1、6、3、9、11(4)1、3、6、9、11.1、冒泡排序MATLAB程序实现:X=[1,9,6,11,3];a=size(X,2);fori=1:a

forj=1:a-1y=X(j);z=X(j+1);

ifX(j)>X(j+1)X(j)=z;X(j+1)=y;

end

endXend.2、选择排序原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。.2、选择排序例:对1、9、6、11、3这5个数字进行从小到大排序?选择排序:(1)1、9、6、11、3(2)1、3、6、11、9(3)1、3、6、11、9(4)1、3、6、9、11.2、选择排序MATLAB程序实现:X=[1,9,6,11,3,12,18];a=size(X,2);fori=1:ax=X(i:a);y=min(x);b=find(X==y);X(b)=X(i);X(i)=y;Xend.3、插入排序原理:通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。.3、插入排序例:对1、9、6、11、3这5个数字进行从小到大排序?选择排序:(1)1、9、6、11、3(2)1、6、9、11、3(3)1、6、9、11、3(4)1、3、6、9、11.3、插入排序MATLAB程序实现:X=[1,9,6,11,3,12,18];a=size(X,2);forj=2:akey=X(j);i=j-1;

whilei>0&&X(i)>keyX(i+1)=X(i);i=i-1;

endX(i+1)=key;Xend.4、希尔排序插入排序当原始数据比较有序时,效率非常高。但当原始数据无序时,效率比较低。希尔排序是对插入排序的改进。希尔排序目标:在进行排序之前让数据变得更为有序,提高排序效率。.4、希尔排序步骤:将待排序列划分为若干组,在每一组内进行插入排序,以使整个序列基本有序,然后再对整个序列进行插入排序。.4、希尔排序例:利用希尔方法对592、401、874、141、348、72、911、887、820、283进行排序。.5、归并排序基本思想:将两个或两个以上的有序子序列“归并”为一个有序序列。在内部排序中,通常采用的是2-路归并排序。即:将两个位置相邻的有序子序列归并为一个有序序列。.5、归并排序如何进行两路归并?将两个有序表的元素进行比较,小者复制到目标表中。.5、归并排序5243574222()192330()ij()k5192324303574222两路归并动画演示ikjkjkikjk[s][m][t][m+1].5、归并排序具体实现步骤假设初始序列含有n个记录,则可看成n个有序的子序列,每个子序列长度为1。然后两两归并,得到

n/2个长度为2或1的有序子序列;再两两归并,……如此重复,直至得到一个长度为n的有序序列为止。.5、归并排序初始时:[49][38][65][97][76][13][27]初始关键字:[49][38][65][97][76][13][27]一趟归并后:[3849][6597][1376][27]二趟归并后:[38496597][132776]三趟归并后:[13273849657697].6、快速排序.6、快速排序

(7)3813274965(8)3813274965(9)1338274965

(10)1327384965冒泡算法最少需要10步。能否用更少的步数完成排序?.6、快速排序基本思想:(1)从数列中挑出一个元素,称为“基准”(2)所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(3)对上步分成的两端无序数组重复(1)和(2)步操作,直到完成排序。.6、快速排序例:利用快速排序将38、49、65、13、27完成排序?(1)选取38为基准,将大于38的值放右边,小的放左边:(2)在左边数组选取13为基准,重复上步(3)在右边数组选取49为基准,重复上步1327384965.6、快速排序MATLAB实现X=[1,9,6,11,3];Sta=X(3);%基准X1=X(X<Sta);X2=X(X>Sta);Sta1=X1(1);X11=X1(X1<Sta1);X12=X1(X1>Sta1);Sta2=X2(1);X21=X2(X2<Sta2);X22=X2(X2>Sta2);X=[X11Sta1X12StaX21Sta2X22].7、堆排序堆的定义:若n个元素的序列{a1a2…an}满足则分别称该序列{a1a2…an}为小根堆和大根堆。.7、堆排序例:下面序列为堆,对应的完全二叉树分别为:773562551435481448356255983577小根堆大根堆.7、堆排序建堆在实际应用中,大多数数据构建的二叉树并不是堆,比如:解决方案:调整次序,构建大根堆或小根堆。.7、堆排序建堆例:.7、堆排序建堆例:将序列{28,25,16,36,18,32}构建成大根堆.7、堆排序堆排序原理若在输出堆顶的最小值(最大值)后,使得剩余n-1个元素的序列重又建成一个堆,则得到n个元素的次小值(次大值)……如此反复,便能得到一个有序序列,这个过程称之为堆排序。问题:如何在输出堆顶元素后,调整剩余元素为一个新的堆?.7、堆排序问题:如何在输出堆顶元素后,调整剩余元素为一个新的堆?解决方案:输出堆顶元素之后,以堆中最后一个元素替代之,然后重新构建堆。.7、堆排序例题:用堆排序将序列{20,60,26,30,36,10}调整为递增序列。(1)构建小根堆.7、堆排序(2)提取堆顶10,并用最后一个元素替换堆顶,重新构建小根堆。.7、堆排序(3)提取堆顶20,并用最后一个元素替换堆顶,重新构建小根堆。.7、堆排序(4)提取堆顶26,并用最后一个元素替换堆顶,重新构建小根堆。.7、堆排序(5)提取堆顶30,并用最后一个元素替换堆顶,重新构建小根堆。(6)提取堆顶36,剩余一个数60,提取60。.8、计数排序排序原理:利用哈希的方法,将每个数据出现的次数都统计下来。哈希表是顺序的,所以我们统计完后直接遍历哈希表,将数据再重写回原数据空间就可以完成排序。.8、计数排序对一组数据进行排序做出图解:.8、计数排序MATLAB代码X=[1,9

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论