11--检索与排序.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
排序 简单选择 算法分析 算法框架 未排序子表不断减小,已排序子表不断增大的算法框架 while(head table-length){ 核心算法:每次从未排序子表选出最小的元素,与head指向的元素交换。 head ++; } head = 0; head是两个子表的分界线 3 1 4 2 head 课堂练习:请参照前面的算法写出算法框架 排序 简单选择 核心算法 从未排序子表中选出最小的元素(逐个比较) 最小的元素和未排序子表首元素交换 3 1 4 2 head j = head; while(j table-length){ j++; } min = j; if( table-data[ j ].key table-data[min].key) min = j; table-data[head] table-data[min]; 课堂练习:请写出选择最小元素的算法 课堂练习:请写出元素交换的算法 void select_sort(table){ head = 0; } while ( head table-length){ head = head +1; } j = head, min=j; while( j table-length) if(table-data[ j ].keytable-data[min].key) min = j; j++; } temp = table-data[head]; table-data[head] = table-data[min]; table-data[min] = temp; table-data[head] table-data[min]; 排序 简单选择 排序 果果有一大堆拼装玩具的零件,大大小小,各式各样。零件堆在一起,每次找需要的零件都很麻烦。爸爸给了果果一个全是小格子的盒子,要他把零件按照从小到大的顺序依次放在各个格子里。你能教教他吗? 排序 简单插入与简单选择算法的比较 排序效率 简单插入算法搬移元素的次数较多 简单选择算法比较元素的次数较多,但搬移次数少 对于一个基本有序的表,倾向使用 算法 对于一个顺序混乱的表,倾向使用 算法 简单插入 简单选择 例:1 2 3 4 5 7 6 排序 简单插入与简单选择算法的比较 稳定性: 简单插入算法是 ? 简单选择算法是 ? 稳定的 不稳定的 算法的稳定性: 对相同排序码的元素之间相对位置的维持 保持相对位置不变--稳定算法 不一定保持相对位置--不稳定算法 1 4 2 3 3 例: 排序 冒泡排序 6.4 冒泡排序 基本思想:逐个交换次序不当的相邻表项,多趟扫描后得到排序表 3 19 2 4 13 10 交换 19 2 交换 19 4 交换 13 19 10 19 交换 排序 冒泡排序 冒泡! 最大的元素在第一趟算法中排到了(冒)表尾 次大的元素在第二趟算法中将冒到倒数第二 逐趟冒泡,我们就获得排序表 3 19 2 4 13 10 19 2 19 4 13 19 19 10 13 13 10 2 3 排序 冒泡排序 算法分析 (1)多趟扫描的框架 每一趟扫描,都将一个最大的元素排到表尾。 每一趟扫描,未排序子表减少一格 for( turn = 0 ; turn table-length -2 ; turn ++ ){ 核心算法:从前向后,每两个元素根据大小交换位置。 } for(turn = table-length-1;turn 1;turn - -){ 核心算法: } turn:未排序子表结束位置 法一 法二 排序 冒泡排序 (2)核心算法,从前向后逐个比较相邻元素的排序码,并根据大小关系交换元素位置 for( i = 0 ; i turn-1 ; i++){ if( table-data[ i ].key table-data[ i+1 ].key){ } } temp = table-data[ i ]; table-data[ i ] = table-data[ i+1 ]; table-data[ i+1 ] = temp; table-data[ i ] table-data[ i+1 ] 排序 冒泡排序 改进 不一定要进行table-length-1趟,当发现有一趟算法中没有发生交换事件,说明表中的元素已经排好序了。 void bubble_sort( table){

文档评论(0)

fc86033 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档