- 1、本文档共49页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
算法描述(P282, 算法10.10-10.11) 算法评价 时间复杂度:平均、最坏情况下 T(n)=O(nlogn) 空间复杂度:S(n)=O(1) 归并排序 归并——将两个或两个以上的有序表组合成一个新的有序表,叫~ 2-路归并排序 排序过程 设初始序列含有n个记录,则可看成n个有序的子序列,每个子序列长度为1 两两合并,得到?n/2?个长度为2或1的有序子序列 再两两合并,……如此重复,直至得到一个长度为n的有序序列为止 例 初始关键字: [49] [38] [65] [97] [76] [13] [27] 一趟归并后: [38 49] [65 97] [13 76] [27] 二趟归并后: [38 49 65 97] [13 27 76] 三趟归并后: [13 27 38 49 65 76 97] 【算法】两相邻有序段归并 void merge(SeqList R, SeqList y, int low, int m, int high) { //low为第一个元素序号,high是最后一个, //m是第一个有序段的长度 int i=low; j=m+1, p = low; while(i=m j=high) y[p++] = (R[i].key = R[j].key)? R[i++] : R[j++]; while(i=m) y[p++] = R[i++] ; while(j=high) y[p++] = R[j++]; for(i = low; i =high; i++) R[i] = y[i]; } 算法描述(P283, 算法10.12-10.14) 算法评价 时间复杂度:T(n)=O(nlogn) 空间复杂度:S(n)=O(n) 基数排序 多关键字排序 定义: 例 对52张扑克牌按以下次序排序: ?2?3……?A?2?3……?A ?2?3……?A?2?3……?A 两个关键字:花色( ???? ) 面值(23……A) 并且“花色”地位高于“面值” 多关键字排序方法 最高位优先法(MSD):先对最高位关键字k1(如花色)排序,将序列分成若干子序列,每个子序列有相同的k1值;然后让每个子序列对次关键字k2(如面值)排序,又分成若干更小的子序列;依次重复,直至就每个子序列对最低位关键字kd排序;最后将所有子序列依次连接在一起成为一个有序序列 最低位优先法(LSD):从最低位关键字kd起进行排序,然后再对高一位的关键字排序,……依次重复,直至对最高位关键字k1排序后,便成为一个有序序列 MSD与LSD不同特点 按MSD排序,必须将序列逐层分割成若干子序列,然后对各子序列分别排序 按LSD排序,不必分成子序列,对每个关键字都是整个序列参加排序;并且可不通过关键字比较,而通过若干次分配与收集实现排序 链式基数排序 基数排序:借助“分配”和“收集”对单逻辑关键字进行排序的一种方法 链式基数排序:用链表作存储结构的基数排序 链式基数排序步骤( 对数字作为关键字来说,其基数为10:0~9) 设置10个队列,f[i]和e[i]分别为第i个队列的头指针和尾指针 第一趟分配对最低位关键字(个位)进行,改变记录的指针值,将链表中记录分配至10个链队列中,每个队列记录的关键字的个位相同 第一趟收集是改变所有非空队列的队尾记录的指针域,令其指向下一个非空队列的队头记录,重新将10个队列链成一个链表 重复上述两步,进行第二趟、第三趟……分配和收集,分别对十位、百位……进行,最后得到一个有序序列 例 初始状态: 278 109 063 930 589 184 505 269 008 083 109 589 269 278 063 930 083 184 505 008 e[0] e[1] e[2] e[3] e[4] e[5] e[6] e[7] e[8] e[9] f[0] f[1] f[2] f[3] f[4] f[5] f[6] f[7] f[8] f[9] 一趟分配 930 063 083 184 505 278 008 109 589 269 一趟收集: 505 008 109 930 063 269 278 083 184 589 二趟收集: 083 184 589 063 505 269 930 e[0]
文档评论(0)