正在加载图片...
变量MN:分别代表实际的元素种类数和元素的总数,数组A〔1:N):长度为N, 初始时装待分类元素,算法执行完后装已分类的N个元素。 数组VALUE〔1:M〕:关键字值数组,按分类次序存贮每一种类元素之关键字值, 即满足:VALUE Ci)<VALUE〔i+1〕,1≤i≤M-1。数组P〔1:M):指针 数组,指针P〔i〕指向当前第种元素形成的队列之队头元素位置。 变量POIN T:指针,指向当前正扫描到的待分类元素。 现分别介绍各部分设计思想。 (1)输入待分类元素,建立关键字值数组VALUE,并给指针数组P赋初值。 在这一部分中,先读人全部元素放于数组A中。然后扫描N个元素一遍,每扫描到一 个元素,就采用折半查找方法查找值数组VALUE,判断该元素是否是新的一类元素,即 是否有新的关键字值,若是,将其关键字值按分类次序插入到值数组VALUE中适当位置, 并将种类数M增1。全部元素扫描完后,置HM=(M+1)DIV2,置P〔i)=O(1≤ i≤HM),置P〔i)=N+1(HM+1≤i≤N),置指钋PO1NT=1。 (2)通过一次扫描将元素分类完毕。 当指针POINT<指针P〔HM+1〕时,循环执行下列操作(见图一、二): D扫描元素A〔POINT〕,置X=A〔POINT),利用折半查找法查找值数组判断该 元素所属种类。若其属于第I种元素,即VALUE〔I〕=A〔POINT)。KEY, 那么,如果I≤HM,转②步。否则,则转③步。 ②置K:=HM,当I≤K时,循环执行下列操作:将指针P〔K〕往后移动一个位置, 即增1,再将第K种元素所对应的队列K之队尾元素移至指针P〔K〕所指位置,即 A〔P〔K)):=A〔P〔K-1)+1),然后置K:=K-1,继续循环。循环 结束后,将指针P〔I〕后移一个位置,将正扫描到的元素A〔POINT)(保存在X 中)送入P〔I)所指位置,即P〔I〕·=P〔I)+1,A〔P〔I)):=X,然 后将指针POINT后移一个位置,扫描下一个待分类元素。 ③置K:=HM+1,将A〔P〔K)一1〕送A〔POINT〕(新的待分类元素), 然后,循环执行下列操作直至I≤K:将指针P〔K〕往前移动一个位置,即减1,将第K 种元素所对应的队列K之队尾元素移到P〔K〕现在所指位置,即P〔K):=P〔K) -1,A〔P〔K)):=A〔P〔K+1)-1〕,再置K:=K+1,继续循环。循环 结束后,将指针P〔【〕往前移动一个位置,再将当前正扫描到的元素X送入指针P〔I)所 指位置,即P〔I:=P〔I)-1,A〔P〔I〕):=X,然后,指针POINT不变,继 续扫描“下一个”待分类元素。 (3)输出分类结果 将现在数组A中的元素输出,即得分类结果。 A(I 待分类元素 A(N) 介 P1,P2,…PHM,值为0。 PHM+I,…PM,值为N+1e (图一)初始状态时 91变量 、 分别 代表实际的元素种类数和元素的总 数 。 数组 〔 〕 长 度为 , 初 始时 装 待分 类元 素 , 算法 执行 完 后 装 己分 类的 个元素 。 数组 〔 〕 关键字值数组 , 按分 类次序存贮每一种 类元素之关键字值 , 即满 足 〔 〕 〔 〕 , 簇 镇 一 。 数组 〔 〕 指 针 数组 , 指针 〔 〕 指 向 当前 第 种元 素形 成的队 列之队 头元 素位 置 。 变量 指针 , 指 向当前正 扫描 到的 待分 类元 素 。 现分别 介绍 各部分 设计 思想 。 输入 待分 类元素 , 建 立 关键 字值数组 , 并给指针 数组 赋初值 。 在这 一部分 中 , 先读 入 全部元素放于数组 中 。 然后 扫描 个元素一 遍 , 每 扫描 到一 个元 素 , 就 采用折 半查找方法 查找 值数组 , 判 断该元素是 否是 新的 一 类元素 , 即 是 否有新的关键 字值 , 若是 , 将其关键字值按分 类次序插 人到 值数组 中适 当位置 , 并将种 类数 增 。 全部元素 扫描完后 , 置 , 置 〔 〕 《 , 置 〔 〕 《 簇 , 置 指针 。 通 过一 次 扫描 将元 素分 类完毕 。 当指针 指针 〔 〕 时 , 循环执行 下列操作 见 图一 、 二 ①扫描元 素 〔 〕 , 置 二 〔 〕 ,利用折半查找法 查找值数组判 断该 元 素所 属种 类 。 若 其属于第 种元 素 , 即 〔 〕 二 〔 〕 。 , 那 么 , 如果 簇 , 转②步 。 否 则 , 则转③步 。 ②置 二 , 当 时 , 循环执行 下 列操 作 将指针 〔 〕 往后 移动一个 位置 , 即增 ,再 将第 种元素所对应 的队 列 之队 尾元 素移至 指针 〔 〕 所 指位 置 , 即 〔 〔 〕 〕 〔 〔 一 〕 十 〕 , 然后置 二 一 , 继 续循环 。 循环 结 束后 , 将指针 〔 〕 后移一 个位置 , 将正 扫描到的元 素 〔 〕 保 存在 中 送 入 〔 〕 听指 位 置 , 即 〔 〕 〔 〕 , 〔 〔 〕 〕 二 , 然 后 将指针 后移一个 位置 , 扫描 下一 个待分 类元素 。 ③ 置 二 , 将 〔 〔 〕 一 〕 送 〔 〕 新的 待分 类 元 素 , 然 后 , 循 环 执行 下 列操 作直至 将指针 〔 〕 往前 移动 一个位置 , 即减 , 将第 种元 素所 对应的队 列 之队尾元 素移 到 〔 〕 现 在 所 指 位 置 , 即 〔 〕 〔 〕 一 , 〔 〔 〕 〕 二 〔 〔 〕 一 〕 , 再置 , 十 , 继续循 环 。 循 环 结 束后 , 将指针 〔 〕 往前移动 一个位 置 , 再 将 当前正 扫描 到的元 素 送 入 指针 〔 〕 所 指位置 , 即 〔 〕 〔 〕 一 , 〔 〔 〕 〕 , 然后 , 指针 不 变 , 继 续扫描 “ 下一 个 ” 待分 类元素 。 输 出分 类结果 将现在数组 中的元 素输 出 , 即得分 类结 果 。 仁 、沙 〔 〕 待分 类元 素 仓 , , … 。 、 , 值为 。 。 。 、 , 仑 … ,,, 值为 图一 初 始 状 态时
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有