成果第十章排序_第1页
成果第十章排序_第2页
成果第十章排序_第3页
成果第十章排序_第4页
成果第十章排序_第5页
已阅读5页,还剩96页未读, 继续免费阅读

下载本文档

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

文档简介

1、1 2 第八章第八章 第九章第九章 3 4 排序是计算机内经常进行的一种排序是计算机内经常进行的一种 操作,其目的是将一组操作,其目的是将一组 录序列调整为录序列调整为的记录序列。的记录序列。 5 6 若若整个排序过程不需要访问外存不需要访问外存 便能完成,则称此类排序问题便能完成,则称此类排序问题为内部内部 排序排序; 反之,若参加排序的记录数量很反之,若参加排序的记录数量很 大,整个序列的排序过程不可能在内大,整个序列的排序过程不可能在内 存中完成,则称此类排序问题为存中完成,则称此类排序问题为外部 排序。 7 内部排序的过程是一个逐步扩大内部排序的过程是一个逐步扩大 记录的记录的的过程。

2、的过程。 有序序列区无 序 序 列 区 有序序列区无 序 序 列 区 8 v 9 有序序列R1.i-1 无序序列 Ri.n 有序序列R1.i无序序列 Ri+1.n Ri 10 有序序列R1.i-1 无序序列 Ri.n 有序序列R1.i无序序列 Ri+1.n Ri 11 3. 3. 选择类选择类 有序序列R1.i-1 Ri.n 有序序列R1.i无序序列 Ri+1.n RiRm 12 “归并归并” 有序序列R1.n有序序列Ri.m 有序序列R1.n+m 13 /待排顺序表最大长度待排顺序表最大长度 / / 关键字类型为整数类型关键字类型为整数类型 / / 关键字项关键字项 / / 其它数据项其它数

3、据项 / / 记录类型记录类型 /r0/r0闲置闲置 /顺序表长度顺序表长度 /顺序表类型顺序表类型 14 15 有序序列R1.i-1 Ri 无序序列 Ri.n 有序序列R1.i无序序列无序序列 Ri+1.nRi+1.n 16 实现实现“一趟插入排序一趟插入排序”可分三步进行:可分三步进行: 3 3将将RRi i ( (复制复制) )到到Rj+1Rj+1的位置上。的位置上。 2 2将将Rj+1.i-1Rj+1.i-1中的所有中的所有均均一一 个位置;个位置; 1 1在在R1.i-1R1.i-1中中RRi i 的插入位置,的插入位置, R1.j.keyR1.j.key R Ri i.key Rj

4、+1.i-1.key.key Rj+1.i-1.key; 17 (基于顺序查找)(基于顺序查找) (基于链表存储)(基于链表存储) (基于折半查找)(基于折半查找) (基于逐趟缩小增量)(基于逐趟缩小增量) 18 R0 = Ri; / / 设置设置“哨兵哨兵” R0 j Ri for (j=i-1; R0.keyRj.key; -j) ; / / 从后往前找,同时实现移动从后往前找,同时实现移动 j=i-1 Rj+1 = R0; Rj+1 = R0; 插入位置插入位置 if (Ri.key Ri-1.key) 19 void InsertionSort ( SqList i=L.length;

5、 +i ) /n-1趟排序趟排序 if (L.ri.key =high+1; -j ) L.rj+1 = L.rj; / 记录后移记录后移 L.rhigh+1 = L.r0; / 插入插入 25 low = 1; high = i-1; while (low=high) m = (low+high)/2; / 折半折半 if (L.r0.key N-,时间复杂度,时间复杂度 为为OO(n n(loglog2 2n n)2 2)。)。 35 一、起泡排序一、起泡排序 二、一趟快速排序二、一趟快速排序 三、快速排序三、快速排序 四、快速排序的时间分析四、快速排序的时间分析 36 一、起泡排序一、起

6、泡排序 假设在排序过程中,记录序列假设在排序过程中,记录序列 R1.nR1.n的状态为:的状态为: 第第 i i 趟起泡排序趟起泡排序 无序序列R1.n-i+1 有序序列 Rn-i+2.n n-i+1 无序序列R1.n-i 有序序列 Rn-i+1.n 比较相邻记录,将关比较相邻记录,将关 键字最大的记录键字最大的记录交换交换 到到 n-i+1 n-i+1 的位置上的位置上 37 2. 2. 一般情况下,每经过一趟一般情况下,每经过一趟“起泡起泡”, “i i 减一减一”,但并不是每趟都如此。,但并不是每趟都如此。 2553157 9 8 9 i=7 i=6 13 i=2 1. 1. 起泡排序的

7、结束条件为起泡排序的结束条件为: : 最后一趟没有进行最后一趟没有进行“交换记录交换记录”。 38 void BubbleSort(Elem R , int n) while (i 1) /n-1趟排序趟排序 / while / BubbleSort i = n; i = lastExchangeIndex; / 本趟进行过交换的本趟进行过交换的 最后最后 /一个记录的位置一个记录的位置 if (Rj+1.key Rj.key) Swap(Rj, Rj+1); lastExchangeIndex = j;/记下记下进行交换的记录位置进行交换的记录位置 /if for (j = 1; j i;

8、j+) lastExchangeIndex = 1; 39 时间分析时间分析: : 最好的情况最好的情况(关键字在记录序列中顺(关键字在记录序列中顺 序有序):序有序): 只需进行一趟起泡只需进行一趟起泡 “比较比较”的次数:的次数: 最坏的情况最坏的情况(关键字在记录序列中逆(关键字在记录序列中逆 序有序):序有序): 需进行需进行n-1n-1趟起泡趟起泡 “比较比较”的次数:的次数: 0 “移动移动”的次数:的次数: “移动移动”的次数:的次数: n-1 40 二、一趟快速排序(一次划分)二、一趟快速排序(一次划分) 目标:找一个记录,目标:找一个记录, “枢轴枢轴”,关键字小于枢轴关键字

9、小于枢轴 移动至该记录之前,移动至该记录之前,关键字大关键字大 于枢轴于枢轴移动至该记录之后。移动至该记录之后。 一趟排序一趟排序 分割成两部分:分割成两部分:Rs.i-1Rs.i-1和和Ri+1.tRi+1.t,且,且 Rj.key RRj.key Ri i.key Rj.key.key Rj.key (sji-1) (sji-1) 枢轴枢轴 (i+1jt)(i+1jt)。 41 s t lowhigh 设设 Rs=52 Rs=52 为枢轴为枢轴 将将 Rhigh.key Rhigh.key 和和 枢轴的关键字进行枢轴的关键字进行 比较,要求比较,要求Rhigh.key Rhigh.key

10、枢轴的关键字枢轴的关键字 将将 Rlow.key Rlow.key 和和 枢轴的关键字进行枢轴的关键字进行 比较,要求比较,要求Rlow.key Rlow.key 枢轴的关键字枢轴的关键字 high 23 low 80 high 14 low 52 例如例如 R0 52 lowhighhigh high low 42 一趟快速排序算法:一趟快速排序算法: int Partition(RedType while (lowhigh) while (lowhigh Rlow = Rhigh; while (lowhigh Rhigh = Rlow; return low; / 返回枢轴所在位置返回枢

11、轴所在位置 / Partition 43 首先对无序的记录序列进行首先对无序的记录序列进行“一次划一次划 分分”,之后分别对分割所得两个子序列,之后分别对分割所得两个子序列 “递归递归”进行快速排序。进行快速排序。 无无 序序 的的 记记 录录 序序 列列 无序记录子序列无序记录子序列(1)(1)无序子序列无序子序列(2)(2) 枢轴枢轴 一次划分一次划分 分别进行快速排序 44 void QSort (RedType / 对对 Rs.t 进行一次划分进行一次划分 QSort(R, s, center -1); /对低子序列递归排序。对低子序列递归排序。 QSort(R, center +1,

12、 t); /对高子序列递归排序对高子序列递归排序 45 我们已讨论过的排序算法,需要进行我们已讨论过的排序算法,需要进行n-1n-1趟比较,趟比较, 每趟需要比较大约每趟需要比较大约n n次。次。 子序列子序列1 1子序列子序列2 2 枢轴枢轴 子序列子序列1.11.1子序列子序列1.21.2枢轴枢轴子序列子序列2.12.1子序列子序列2.22.2枢轴枢轴 结论结论: : 快速排序的时间复杂度为快速排序的时间复杂度为O(nlogn)O(nlogn) 快速排序算法算法需要排序的快速排序算法算法需要排序的“趟趟”数等于以上数等于以上 排序树的深度(排序树的深度( loglog2 2n n +1 +

13、1 ),每趟大约需要比较),每趟大约需要比较n n 次。次。 46 若待排记录的初始状态为按关键字有若待排记录的初始状态为按关键字有 序时,快速排序将蜕化为起泡排序,其时序时,快速排序将蜕化为起泡排序,其时 间复杂度为间复杂度为O(nO(n2 2) )。 为避免出现这种情况,需在进行一次为避免出现这种情况,需在进行一次 划分之前,进行划分之前,进行“预处理预处理”,即:,即: 先对先对 R(s).key, R(t).key R(s).key, R(t).key 和和 中间元素中间元素 关键字进行相互比较,然后取关键字为关键字进行相互比较,然后取关键字为 “三者之中三者之中”的记录为枢轴记录。的

14、记录为枢轴记录。 47 9.4 9.4 堆堆 排排 序序 48 假设排序过程中,待排记录序列的状态为:假设排序过程中,待排记录序列的状态为: 有序序列R1.i-1无序序列 Ri.n 第第 i i 趟趟 简单选择排序简单选择排序 从中选出从中选出 关键字最小的记录关键字最小的记录 有序序列R1.i无序序列 Ri+1.n 49 void SelectSort (Elem R, int n ) / / 对记录序列对记录序列R1.nR1.n作简单选择排序。作简单选择排序。 for (i=1; i0; -i ) HeapAdjust ( H.r, i, H.length ); /建大顶堆建大顶堆 for

15、 ( i=H.length; i1; -i ) H.r1H.ri; / 将堆顶记录和当前未经排序子序列将堆顶记录和当前未经排序子序列 / H.r1.i中最后一个记录相互交换中最后一个记录相互交换 HeapAdjust(H.r, 1, i-1); / 对对 H.r1 进行筛选进行筛选 56 如何如何“建堆建堆”? 如何如何“筛选筛选”? typedef SqList HeapType;typedef SqList HeapType; / / 堆采用顺序表表示之堆采用顺序表表示之 57 98 8149 73 556412 362740 例如例如: : 是大顶堆是大顶堆 12 但在但在 98 98

16、和和 12 12 进行互换之后,它就不进行互换之后,它就不 是堆了。是堆了。 因此,需要对它进行因此,需要对它进行“筛选筛选”。 98 12 81 73 64 1298 比较 比较比较 58 所谓所谓“筛选筛选”指的是,对一棵左指的是,对一棵左/ /右子右子 树均为堆的完全二叉树,树均为堆的完全二叉树,“调整调整”根结点使根结点使 整个二叉树也成为一个堆。整个二叉树也成为一个堆。 堆堆 堆堆 筛选筛选 59 void HeapAdjust (RcdType / 暂存暂存 Rs for ( j=2*s; j= Rj.key ) break; / / 再作再作“根根”和和“子树根子树根”之间的比较

17、,之间的比较, / / 若若“=”=”成立,则说明已找到成立,则说明已找到 rc rc 的插的插 / / 入位置入位置 s s ,不需要继续往下调整,不需要继续往下调整 Rs = Rj; s = j; / / 否则记录上移,尚需继续往下调整否则记录上移,尚需继续往下调整 if ( jm / / 左左/ /右右“子树根子树根”之间先进行相互比较之间先进行相互比较 / / 令令 j j 指示关键字较大记录的位置指示关键字较大记录的位置 61 40 5549 73 816436 122798 12 3681 73 49 9881 73 55 现在,左现在,左/ /右子树都已经调整为堆,最右子树都已经

18、调整为堆,最 后只要调整根结点,使整个二叉树是个后只要调整根结点,使整个二叉树是个 “堆堆”即可。即可。 98 49 40 64 36 12 27 62 堆排序的时间复杂度分析:堆排序的时间复杂度分析: 因此,堆排序的时间复杂度为因此,堆排序的时间复杂度为O(nlogn)O(nlogn)。 1. 1. 对对 n n 个关键字,建成深度为个关键字,建成深度为 h(=h(= loglog2 2n n +1)+1)的堆,的堆,所需进行的关键字比所需进行的关键字比 较的次数至多较的次数至多4n4n; 2. 2. 排序过程即为调整排序过程即为调整“堆顶堆顶” ” n-1n-1 次次 的过程,交换堆顶元素

19、后的过程,交换堆顶元素后“筛选筛选”所需的所需的 比较次数最多为比较次数最多为 loglog2 2n n +1 +1 次。次。 63 9.59.5 归归 并并 排排 序序 将两个或两个以上的有序子序列将两个或两个以上的有序子序列 “归并归并” ” 为一个有序序列。为一个有序序列。 64 在内部排序中,通常采用的是在内部排序中,通常采用的是 排序排序。即:将两个位置相邻的。即:将两个位置相邻的 记录有序子序列记录有序子序列 有有 序序 序序 列列 RRl l.n n 有序子序列有序子序列 RRl l.m m 有序子序列有序子序列 Rm+1.nRm+1.n Merge 65 void Merge

20、(RcdType SR, RcdType i=m +k) / / 将将SRSR中记录由小到大地并入中记录由小到大地并入TRTR if(SRi.key=SRj.key) TRk =SRi+; else TRk = SRj+; 66 无无 序序 序序 列列 SRSRl l.n n 设计归并排序算法设计归并排序算法Msort(m=n/2)(m=n/2): 有序序列有序序列TR2l.mTR2l.m 有序序列有序序列TR2m+l.nTR2m+l.n MsortMsort Merge 有有 序序 序序 列列 TR1TR1l l.n n 67 void Msort ( RcdType SR, RcdType

21、 else / Msort m = (s+t)/2; Msort (SR, TR2, s, m); Msort (SR, TR2, m+1, t); Merge (TR2, TR1, s, m, t); 68 例如:例如: 52, 23, 80, 36, 68, 14 (s=1, t=6) 52, 23, 80 36, 68, 14 52, 23 80 52 23, 52 23, 52, 80 36, 68 14 36 68 36, 68 14, 36, 68 14, 23, 36, 52, 68, 80 23 69 无无 序序 序序 列列 SRSRl l.n n 有序序列有序序列TR2l.m

22、TR2l.m?有序序列有序序列TR2m+l.nTR2m+l.n? MsortMsort Merge 有有 序序 序序 列列 TR1TR1l l.n n 归并排序的时间复杂度分析:归并排序的时间复杂度分析: Msort Msort 每一趟归并的时间复杂度为每一趟归并的时间复杂度为 O(n)O(n), 总共需进行总共需进行 loglog2 2n n +1+1趟,时间复杂度趟,时间复杂度 为为(nlogn(nlogn)。)。 70 稳定的排序方法指的是,对于两个关稳定的排序方法指的是,对于两个关 键字相等的记录,它们在序列中的相对位键字相等的记录,它们在序列中的相对位 置,在排序之前和经过排序之后,

23、没有置,在排序之前和经过排序之后,没有( (不不 可能发生可能发生) )改变。改变。 排序之前排序之前 : : Ri(K) Rj(K) 排序之后排序之后 : : Ri(K) Rj(K) 71 例如:例如: 排序前排序前 ( 56, 34, 47, 23, 66, 18, 82, ( 56, 34, 47, 23, 66, 18, 82, 4747) ) 若排序后(若排序后(总是总是)得到结果)得到结果 ( 18, 23, 34, 47, ( 18, 23, 34, 47, 4747, 56, 66, 82 ), 56, 66, 82 ) 则称该排序方法是则称该排序方法是稳定稳定的的; ; 若排

24、序后(若排序后(可能可能)得到结果)得到结果 ( 18, 23, 34, ( 18, 23, 34, 4747, 47, 56, 66, 82 ), 47, 56, 66, 82 ) 则称该排序方法是则称该排序方法是不稳定不稳定的。的。 72 对于不稳定的排序方法,只要能举出对于不稳定的排序方法,只要能举出 一个实例说明即可。一个实例说明即可。 快速排序、堆排序和希尔排序是快速排序、堆排序和希尔排序是 不稳不稳 定的排序方法定的排序方法。 例如例如 : : 对对 4, 3, 4, 3, 4 4, 2 , 2 进行快速排序,进行快速排序, 得到得到 2, 3, 2, 3, 4 4, 4 , 4

25、在无序情况下进行在无序情况下进行“跳跃跳跃” 式比较式比较/ /移动的排序算法是不稳定移动的排序算法是不稳定 的。的。 73 已有算法时间已有算法时间/ /空间复杂度比较空间复杂度比较 分分 类类 算法名称算法名称趟数趟数 每趟比每趟比 较较/移动移动 次数次数 改进改进时间复杂度时间复杂度 空间复空间复 杂度杂度 插插 入入 直接插入直接插入 排序排序 O(n)O(n)O(n2)O(c) 折半插入折半插入 排序排序 O(n)O(n) 查找效率查找效率 提高提高 O(n2)O(c) 表插入排表插入排 序序 O(n)O(n) 移动次数移动次数 减少减少 O(n2)O(n) 希尔排序希尔排序O(l

26、ogn)2)O(n)趟数减少趟数减少O(n(logn)2)O(c) 交交 换换 起泡排序起泡排序O(n)O(n)O(n2)O(c) 快速排序快速排序O(logn)O(n)趟数减少趟数减少O(nlogn)O(logn) 选选 择择 简单选择简单选择 排序排序 O(n)O(n)O(n2)O(c) 堆排序堆排序O(n)O(logn) 每趟比较每趟比较 次数减少次数减少 O(nlogn)O(c) 归归 并并 归并排序归并排序O(logn)O(n)趟数减少趟数减少O(nlogn)O(n) 74 排序方法时间复杂度的下限排序方法时间复杂度的下限” 本章到目前为止讨论的各种排序方本章到目前为止讨论的各种排序

27、方 法都是法都是基于基于“比较关键字比较关键字”的排序方法的排序方法。 可以证明,可以证明, 这类排序法这类排序法可能达到可能达到 的最快的时间复杂度为的最快的时间复杂度为O(O(n nloglogn n) )。 75 例如例如: :对三个关键字进行排序的判定树如下:对三个关键字进行排序的判定树如下: K1K3 K1K2 K1K3 K2K3 K2 K3K2K1K3K1K2K3 K3K2K1K2K3K1K3K1K2K1K3K2 树上的每一次树上的每一次“比较比较”都是必要的都是必要的; ; 树上的叶子结点包含所有可能情况。树上的叶子结点包含所有可能情况。 76 一般情况下,对一般情况下,对n n

28、个关键字进行排序,个关键字进行排序, 可能得到的结果有可能得到的结果有n! n! 种,由于含种,由于含 n! n! 个叶子个叶子 结点的二叉树的深度不小于结点的二叉树的深度不小于 loglog2 2(n!)(n!) +1, +1, 则对则对 n n 个关键字进行排序的比较次数至少个关键字进行排序的比较次数至少 是是 loglog2 2(n!)(n!) nlog nlog2 2n (n (斯蒂林近似公式斯蒂林近似公式) )。 所以所以,基于,基于“比较关键字比较关键字”进行排序进行排序 的排序方法,可能达到的最快的时间复杂的排序方法,可能达到的最快的时间复杂 度为度为 O(nlogn)O(nlo

29、gn)。 77 9.6 9.6 基基 数数 排排 序序 78 基数排序是一种借助基数排序是一种借助“多关键字多关键字 排序排序”的思想来实现的思想来实现“单关键字排序单关键字排序” 的内部排序算法。的内部排序算法。 多关键字的排序多关键字的排序 链式基数排序链式基数排序 79 n n 个记录的序列个记录的序列 R R1 1, R, R2 2, , ,R Rn n 对关键字对关键字 (K(Ki i0 0, K, Ki i1 1,K,Ki id-1 d-1) ) 有序是指: 有序是指: 其中其中: K: K0 0 被称为 被称为 “ “最主最主”位关键字位关键字 K Kd-1 d-1 被称为 被称

30、为 “ “最次最次”位关键字位关键字 对于序列中任意两个记录对于序列中任意两个记录 R Ri i 和和 R Rj j (1ijn) (1ijn) 都满足下列都满足下列( (词典词典) )有序关系:有序关系: (K(Ki i0 0, K, Ki i1 1, ,K, ,Ki id-1 d-1) (K ) O(d(n+r) O(d(n+r) 其中:分配的时间复杂度其中:分配的时间复杂度O(n)O(n) 收集的时间复杂度收集的时间复杂度O(r)O(r) d d为为“分配分配- -收集收集”的趟数的趟数 注:注:d d为关键字个数为关键字个数 r r为关键字的取值范围为关键字的取值范围 91 92 分分

31、 类类 算法名称算法名称趟数趟数 每趟比每趟比 较较/移动移动 次数次数 改进改进时间复杂度时间复杂度 空间复空间复 杂度杂度 插插 入入 直接插入直接插入 排序排序 O(n)O(n)O(n2)O(c) 折半插入折半插入 排序排序 O(n)O(n) 查找效率查找效率 提高提高 O(n2)O(c) 表插入排表插入排 序序 O(n)O(n) 移动次数移动次数 减少减少 O(n2)O(n) 希尔排序希尔排序O(logn)2)O(n)趟数减少趟数减少O(n(logn)2)O(c) 交交 换换 起泡排序起泡排序O(n)O(n)O(n2)O(c) 快速排序快速排序O(logn)O(n)趟数减少趟数减少O(

32、nlogn)O(logn) 选选 择择 简单选择简单选择 排序排序 O(n)O(n)O(n2)O(c) 堆排序堆排序O(n)O(logn) 每趟比较每趟比较 次数减少次数减少 O(nlogn)O(c) 归归 并并 归并排序归并排序O(logn)O(n)趟数减少趟数减少O(nlogn)O(n) 基基 数数 链式基数链式基数 排序排序 O(d)O(n+r) 趟数与趟数与n 无关无关 O(d(n+r)O(r) 93 94 一一. . 问题的提出问题的提出 待排序的记录数量很大,不能一待排序的记录数量很大,不能一 次装入内存,无法直接利用前几节讨次装入内存,无法直接利用前几节讨 论的排序方法论的排序方

33、法 ( (否则将引起频繁否则将引起频繁 访问内存访问内存) )。 95 按可用内存大小,利用内部排序按可用内存大小,利用内部排序 方法,构造若干方法,构造若干( ( 记录的记录的) ) 有序子序列,通有序子序列,通 常称外存中这些记录有序子序列为常称外存中这些记录有序子序列为“归并归并 段段”; 二、外部排序的基本过程二、外部排序的基本过程 由相对独立的两个步骤组成:由相对独立的两个步骤组成: 通过通过“归并归并”,逐步扩大,逐步扩大 ( (记录记录 的的) )有序子序列的长度,直至外存中整个有序子序列的长度,直至外存中整个 记录序列按关键字有序为止。记录序列按关键字有序为止。 96 例如:例

34、如: 假设有一个含假设有一个含10,00010,000个记录的磁盘文件,个记录的磁盘文件, 而当前所用的计算机一次只能对而当前所用的计算机一次只能对10001000个记录个记录 进行内部排序,则首先利用内部排序的方法进行内部排序,则首先利用内部排序的方法 得到得到1010个初始归并段,然后进行逐趟归并。个初始归并段,然后进行逐趟归并。 假设进行假设进行2 2 路归并路归并( (即两两归并即两两归并) ),则,则 第一趟由第一趟由1010个归并段得到个归并段得到5 5个归并段;个归并段; 最后一趟归并得到整个记录的有序序列。最后一趟归并得到整个记录的有序序列。 第三趟由第三趟由 3 3 个归并段

35、得到个归并段得到2 2个归并段;个归并段; 第二趟由第二趟由 5 5 个归并段得到个归并段得到3 3个归并段;个归并段; 97 1. 1. 了解排序的定义和各种排序方法了解排序的定义和各种排序方法 的特点。熟悉各种方法的排序过程及其的特点。熟悉各种方法的排序过程及其 依据的原则。基于依据的原则。基于“关键字间的比较关键字间的比较” 进行排序的方法可以按排序过程所依据进行排序的方法可以按排序过程所依据 的不同原则分为插入排序、交换排序、的不同原则分为插入排序、交换排序、 选择排序、归并排序等四类。选择排序、归并排序等四类。 98 2. 2. 掌握各种排序方法的时间复杂度掌握各种排序方法的时间复杂度 的分析方法。能从的分析方法。能从“关键字间的比较次关键字间的比较次 数数”分析排序算法的分析排序算法的平均情况平均情况和和最坏情最坏情 况况的时间性能。的时间性能。 按平均时间复杂度划分,内部排序按平均时间复杂度划分,内部排序 可分为可分为三类三类:O(nO(n2 2) )的简单排序方法的简单排序方法, O(nlogn)O(nlogn)的高效排序方法的高效排序方法 和和 O(d(n+r)O(d(n+r) 的基数排序方法。的基数排序方法。 99

温馨提示

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

评论

0/150

提交评论