- 97
- 1
- 约1.51万字
- 约 92页
- 2021-12-05 发布于山东
- 举报
;排序; 2、排序的分类:
(1)、增排序和减排序:如果排序的结果是按关键字从小到大的次序排列的,就是增排序,否则就是减排序。
(2)、内部排序与外部排序:在排序中,若数据表中的所有记录的排列过程都是在内存中进行的,称为内部排序。由于待排序的记录数量太多,在排序过程中不能同时把全部记录放在内存,需要不断地通过在内存和外存之间交换数据元素来完成整个排序的过程,称为外部排序。在外部排序情况下,只有部分记录进入内存,在内存中进行内部排序,待排序完成后再交换到外部存储器中加以保存。然后再将其它待排序的记录调入内存继续排序。这一过程需要反复进行,直到全部记录排出次序为止。显然,内部排序是外部排序的基础,我们这里只研究内部排序。
(3)、稳定排序和不稳定排序:假设Ki=Kj(1≤i≤n,1≤j≤n,i≠j),且在排序前的序列中Ri领先于Rj(即ij)。若在排序后的排序中Ri仍领先于Rj,即那些具有相同关键字的记录,经过排序后它们的相对次序仍然保持不变,则称这种排序方法是稳定的;反之,若Rj领先于Ri,则称所用的方法是不稳定的。; 插入排序、冒泡排序、二叉树排序、二路归并排序及其它线性排序是稳定的。
选择排序、希尔排序、快速排序、堆排序是不稳定的。
(4)、排序算法的效率分析:与许多算法一样,对各种排序算法性能的评价主要从两个方面来考虑,一是时间性能;二是空间性能。
时间复杂度分析
排序算法的时间复杂度可用排序过程中记录之间关键字的比较次数与记录的移动次数来衡量。在本章各节中讨论算法的时间复杂度时,一般都按平均时间复杂度进行估算;对于那些受数据表中记录的初始排列及记录数目影响较大的算法,按最好情况和最坏情况分别进行估算。
空间复杂度分析
排序算法的空间复杂度是指算法在执行时所需的附加存储空间,也就是用来临时存储数据的内存使用情况。
在以后的排序算法中,若无特别说明,均假定待排序的记录序列采用顺序表结构来存储,即数组存储方式,并假定是按关键字递增方式排序。为简单起见,假设关键字类型为整??。; 二、几种典型的(最常见的)内部排序算法详解:
选择排序、冒泡排序、插入排序、快速排序和桶排序。
1、选择排序:算法基本思想如下:
对待排序的序列进行n-1遍处理:
第1遍处理是从a[1],a[2],……a[n]中选择最小的放在a[1]位置;
第2遍处理是从a[2],a[3],……a[n]中选择最小的放在a[2]位置;
……
第I遍处理是将a[ i ],a[ i+1],……a[n]中最小的数与a[ i ]交换位置,这样经过第i遍处理后,a[i]是所有的中的第i小。即前i个数就已经排好序了。
N-1遍处理后,剩下的最后一个一定是最大的,不需要再处理了。
第i个和后边的依次比较,找最小的放在i处。
程序如下:(从小到大排序:简单选择排序);参考程序;优化参考程序; 2、冒泡排序算法:(从小到大排序)
算法基本思想:将待排序的数据看作竖排的一列“气泡”,小的数据比较轻,从而要上浮。
共进行n-1遍处理,每一遍处理,就是从底向上检查序列,如果相邻的两个数据顺序不对,即轻(小)的在下面,就交换他们的位置。
第一遍处理完后,“最轻”的就浮到上面。
第二遍处理完后,“次轻”的就浮到上面。
共需要 n-1 遍处理即完成排序。;参考程序;优化参考程序; 3、插入排序算法:(从小到大排序)
基本思想:每次将一个待排序的数据元素,插入到前面已经排好序的数列中的适当位置,使数列依然有序;直到待排序数据元素全部插入完为止。即经过i-1遍处理后, a[0]、a[1]、a[2]、……、a[i-1]已排好序。第i遍处理是将元素a[i]插入到a[0]、a[1]、a[2]、……、a[i-1]的适当的位置,从而使得a[0]、a[1]、a[2]、……、a[i-1]、a[i] 又是排好的序列。;参考程序; 基本思想:把待排序的 n 个元素放到一个包含 n 个元素的一维数组中,先取数组中的某一个元素作为一个基准元素,把这个元素放到数组中合适的位置,同时对其他元素进行调整,使得在这个基准元素的右边的所有元素都比这个基准元素大,而基准元素左边的元素都比它小。也就是说,这个基准元素当前所在的位置就是排序后的最终位置。然后再对基准元素的前后两个区间分别进行快速排序,直到每个区间为空或者只有一个元素时,整个快速排序结束。;void qsort(int l,int r){ //l:待排序数组首元素下标,r:末尾元素下标
int x,i,
原创力文档

文档评论(0)