学分高考 考研

计算机考研:数据结构常用算法精析(9)

发布时间: 2023-01-30 08:24:03
计算机考研:数据结构常用算法精析(9)

数据结构是计算机考研408计算机学科专业基础综合的重要组成部分,考生需要认真复习,尤其是对于数据结构中一些常用的算法问题,考生一定要弄懂弄会,理解的去掌握。小编下面一一为大家分析一下,帮助考生更好地去掌握。

第十章

内部排序(在内存中进行的排序不需要访问外存的)外部排序(排序量很大,通过分批的读写外存,最终完成排序)

稳定排序和非稳定排序:看相同记录的相对次序是否回发生改变。主要看在排序过程中的比较是不是相邻记录,如果是相邻比较,一定是稳定的排序。如果不是相邻的比较,就是不稳定的。

内排序方法 截止目前,各种内排序方法可归纳为以下五类:

(1)插入排序;(2)交换排序;(3)选择排序;(4)归并排序; (5)基数排序。

插入排序:包括直接插入排序和希尔排序

直接插入排序:(稳定的)

算法描述

void Insort (sqList &L) ∥对顺序文件F直接插入排序的算法∥

{ int i,j;

for (i=2;i<=L.len;i++) ∥插入n-1个记录∥

{

if(L.R[i].key

{ L.R[0]=L.R[i]; ∥待插入记录先存于监视哨∥

L.R[i]=L.R[i-1];

for(j=i-2;L.R[0].key

L.R[j+1]=L.R[j]; ∥记录顺序后移∥

L.R[j+1]=L.R[0]; ∥原R[i]插入j+1位置∥

}

}

}

算法分析

设排序中key比较次数为C,C最小时记为Cmin,最大时记为Cmax。

(1)当原来就有序(正序)时,每插入一个R[i]只需比较key一次,即:

(2)当原本逆序(key从大到小)时,每插入一个R[i]要和子表中i-1个key比较,加上同自身R[0]的比较,此时比较次数最多,即:

(3)记录总的移动次数m(m最小时记为mmin,最大时记为mmax)

正序时,子表中记录的移动免去,即:

逆序时,插入R[i]牵涉移动整个子表。移动次数为2+(i-1)=i+1,此时表的移动次数最大,即:

排序的时间复杂度取耗时最高的量级,故直接插入排序的T(n)=O(n2)。

Shell(希尔)排序又称“缩小增量”排序(不稳定的)

交换类的排序:(起泡排序和快速排序)

起泡排序算法描述

void Bubsort (sqList &L)

{ int i,flag; ∥flag为记录交换的标记∥

Retype temp;

for (i=L.len;i>=2;i--) ∥最多n-1趟排序∥

{ flag=0; //记录每一趟是否发生了交换

for (j=1;j<=i-1;j++) ∥一趟的起泡排序∥

if (L.R[j].key>L.R[j+1].key) ∥两两比较∥

{ temp=L.R[j]; ∥R[j] Û R[j+1]∥

L.R[j]=L.R[j+1];

L.R[j+1]=temp;

flag=1;

}

if (flag==0) break; ∥无记录交换时排序完毕∥

}

}

算法分析

设待排长度为n,算法中总的key比较次数为C。若正序,第一趟就无记录交换,退出循环,Cmin=n-1=O(n);若逆序,则需n-1趟排序,每趟key的比较次数为i-1(2≤i≤n),故:

同理,记录的最大移动次数为:

故起泡排序的时间复杂度T(n)=O(n2)。并且是稳定的。

快速排序:(不稳定的,时间复杂度O(nlogn)),不需要辅助空间,但有最好和最差之分

.xqy_container .xqy_core .xqy_core_main .xqy_core_text{height:auto !important;}计算机考研:数据结构常用算法精析(9)
温馨提示:
本文【计算机考研:数据结构常用算法精析(9)】由作者教培参考提供。该文观点仅代表作者本人,学分高考系信息发布平台,仅提供信息存储空间服务,若存在侵权问题,请及时联系管理员或作者进行删除。
我们采用的作品包括内容和图片部分来源于网络用户投稿,我们不确定投稿用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的权利,请联系我站将及时删除。
内容侵权、违法和不良信息举报
Copyright @ 2024 学分高考 All Rights Reserved 版权所有. 湘ICP备17021685号