- 1、本文档共9页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
专升本数据结构排序算法
2013年福建省高职高专升本应试材料---数据结构排序
计算机科学类---数据结构排序大题
1、直接插入排序(Insert Sort) 时间复杂度为O(n2 )
基本流程:当插入第i个对象时,前面的p-elem [0], p-elem [1],…, p-elem [i-1]已经排好序,此时,用v[i]的关键字与p-elem [i-1], p-elem [i-2],…的关键字顺序进行比较,找到插入位置即将p-elem [i]插入,原来位置上对象向后顺移。
举例:
i (1) (2) (3) (4) (5) (6) (0)
[21] 25 49 25* 16 08 25
1 [21 25] 49 25* 16 08 49
2 [21 25 49] 25* 16 08 25*
3 [21 25 25* 49] 16 08 16
4 [16 21 25 25* 49] 08 08
5 [08 16 21 25 25* 49]
插入排序算法为:
void insertSort(S_TBL *p)
{for(i=2;i=p-length;i++)
if(p-elem[i].key p-elem[i-1].key)/*小于时,需将elem[i]插入有序表*/
{p-elem[0].key=p-elem[i].key; /*为统一算法设置监测*/
for(j=i-1;p-elem[0].key p-elem[j].key;j--)
p-elem[j+1].key=p-elem[j].key;/*记录后移*/
p-elem[j+1].key=p-elem[0].key; /*插入到正确位置*/
}
}
2、 冒泡排序 时间复杂度为O(n2)
方法:对n个记录的表,第一趟冒泡得到一个关键码最小的记录r[0],第二趟冒泡对n-1个记录的表,再得到一个关键码次小的记录r[1],如此重复,直到n个记录按关键码有序的表。
举例:
i (0) (1) (2) (3) (4) (5)
21 25 49 25* 16 08
1 08 21 25 49 25* 16
2 08 16 21 25 49 25*
3 08 16 21 25 25* 49
4 08 16 21 25 25* 49
冒泡排序算法:
void bublesort(elemtype *r)
{
int i,j;
elemtype temp;
for(i=0;in-1; i++)
for(j=n-2;j=i;j--)
if(r[j+1].keyr[j].key)
{ temp=r[j+1];
r[j+1]=r[j];
r[j]=temp;}
}
3、选择排序 时间复杂度为O(n2)
操作方法:第一趟,从n个记录中找出关键码最小的记录与第一个记录交换;第二趟,从第二个记录开始的n-1个记录中再选出关键码最小的记录与第二个记录交换;如此,第i趟,则从第i个记录开始的n-i+1个记录中选出关键码最小的记录与第i个记录交换,直到整个序列按关键码有序。
举例:
算法:
void SelectSort(S_TBL *s)
{ int i,j,k;
for(i=0;is-length;i++) /* 作length-1趟选取 */
{ k=i ;
for(j=i+1;j=s-length;j++)
{ /* 在i开始的length-n+1个记录中选关键码最小的记录 */
if(s-elem[k].keys-elem[j].key)
k=j; } /* t中存放关键码最小记录的下标 */
s-elem[k]--s-elem[i]; /*
文档评论(0)