第10章内部排序.ppt
《第10章内部排序.ppt》由会员分享,可在线阅读,更多相关《第10章内部排序.ppt(63页珍藏版)》请在课桌文档上搜索。
1、Chapter10 排序,排序的基本概念直接插入排序起泡排序简单选择排序快速排序堆排序,6.1基本概念,排序,排序在计算机程序设计中有着非常重要的地位,许多具体应用要求对数据进行排序,而许多复杂的算法也要求以排序为基础。,排序,排序:将一个数据元素的任意序列,重新排列成一个按关键字有序的序列。数据表(datalist):它是待排序数据对象的有限集合。主关键字(key):数据对象有多个属性域,即多个数据成员组成,其中有一个属性域可用来区分对象,作为排序依据,称为关键字。也称为排序码。,排序,有关排序的几个基本问题稳定与不稳定内部排序与外部排序(本章只关注内部排序)性能的衡量,排序方法的分类,按照
2、排序思想插入排序交换排序选择排序归并排序基数排序按照时间复杂度简单排序先进排序其他,6.2 直接插入排序,直接插入排序,基本思想:如果要向一个已经排序的顺序表中插入元素且保持表的有序性,则只需先依次比较,找到该元素的位置,然后移动元素进行插入即可。时间复杂度是O(n).基于这一思想,如果要对一个表进行排序,则可以将表看作两个部分,前N个元素已经排好序,再将第N+1个元素插入到前N个元素中。从N=0开始重复这个过程,直到N=L。,直接插入排序,直接插入排序,直接插入排序,直接插入排序的算法typedef int SortData;void InsertSort(SortData V,int n)
3、/按非递减顺序对表进行排序 SortData temp;int i,j;for(i=1;i 0;j-)/从后向前顺序比较 if(temp Vj-1)Vj=Vj-1;else break;Vj=temp;,直接插入排序,时间复杂度为O(n2),折半插入排序,可见,插入排序由“查找”和“移动”两个基本过程组成,而查找这一步骤实际上是在一个有序表中进行的,因此可以用折半查找代替顺序查找来提高效率。但是由于移动这一过程无法被简化,因此折半插入排序仍然保值O(n2)的时间复杂度。,链表上的插入排序,链表上的插入排序仍然无法回避比较的过程,但是无需移动元素,从总体上看比顺序表上插入排序的性能好一些。,6.
4、3 起泡排序,起泡排序,基本思想:基于两两比较的思想,对于N个元素,如果从第一个开始两两比较,将较小(较大)的一个交换到后面,则经过N-1次比较之后,最小(最大)的元素就被移动到最后一个位置。基于这一思想,如果要对一个表进行排序,则可以先对全部元素进行两两比较,将最小(最大)的元素移动到最后,再对前N-1元素重复过程,再对前N-2个直到所有的元素都排好序。,起泡排序,初始关键字,第一趟排序,第四趟排序,第二趟排序,第三趟排序,第五趟排序,起泡排序,起泡排序的基本算法typedef int SortData;void BubbleSort(SortData a,int n)for(int i=0
5、;i aj+1)int temp=0;temp=aj;aj=aj+1;aj+1=temp;,起泡排序,最多做n-1趟起泡就能把所有对象排好序。在对象的初始排列已经按排序码从小到大排好序时,此算法只执行一趟起泡,做n-1次排序码比较,不移动对象。这是最好的情形。时间复杂度是O(n2)。,起泡排序,起泡排序的改进:在上面的程序中,如果序列经过很少几次循环就已经完成了排序,程序仍然会执行N-1次循环,造成多次循环做无用功。例如对于下面的序列,实际上经过一次循环就已经有序了。,起泡排序,对于这种情况,我们可以设置一个标志,如果一次循环发生数据交换,则令标志为1;如果一次循环不发生数据交换,则令标志为0
6、,当发现标志为0时,就意味着已经排序完成了。,起泡排序,typedef int SortData;void BubbleSort(SortData V,int n)int i=1;int exchange=1;while(i=i;j-)if(Vj-1 Vj)/逆序 Swap(Vj-1,Vj);/交换 exchange=1;/标志置为1,有交换 i+;,起泡排序,扩展阅读:双冒泡排序。,链表上的起泡排序,思考:在链表上进行起泡排序,相比顺序表有哪些不同?1:从前向后的过程,需要借助两个指针来完成。2:需要用另外一个指针来指示已经被移动到最后的若干个元素。3:交换的过程有不同做法。实现起来比较繁琐
7、,建议课下练习。,6.4 简单选择排序,简单选择排序,在一组数据中选择具有最小排序关键字的一个。若它不是这组数据中的第一个,则将它与这组数据中的第一个对调;在剩下的N-1个数据中重复执行第、步,直到完成。,简单选择排序,简单选择排序的排序过程,简单选择排序,简单选择排序的基本算法typedef int SortData;void SelectSort(SortData V,int n)for(int i=0;i n-1;i+)int k=i;/选择具有最小排序码的对象 for(int j=i+1;j n;j+)if(Vj Vk)k=j;/当前具最小排序码的对象 if(k!=i)/对换到第 i
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 10 内部 排序
链接地址:https://www.desk33.com/p-679773.html