[发明专利]一种金字塔排序算法在审
申请号: | 201510975288.9 | 申请日: | 2015-12-22 |
公开(公告)号: | CN105574344A | 公开(公告)日: | 2016-05-11 |
发明(设计)人: | 吕勇;刘斌 | 申请(专利权)人: | 常州信息职业技术学院 |
主分类号: | G06F19/00 | 分类号: | G06F19/00 |
代理公司: | 北京中济纬天专利代理有限公司 11429 | 代理人: | 徐琳淞 |
地址: | 213164 江*** | 国省代码: | 江苏;32 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 金字塔 排序 算法 | ||
技术领域
本发明涉及一种金字塔排序算法。
背景技术
当前,对大量数据进行排序时,通常选择的是快速排序算法。快速排序是性能优异的排序算法,但是若快速排序基准值选择不当或待排序序列基本有序时,快速排序的性能会大幅度降低。而堆排序在待排序序列基本有序的情况下比快速排序快,但是堆排序也有缺点:当待排序元素为复杂的数据结构时,由于堆排序中无效移动次数比较多,对堆排序性能也有较大影响。
发明内容
本发明的目的是提供一种金字塔排序算法,在待排序序列基本有序情况下以及待排序元素具有复杂的数据结构的情况下,提升排序速度。
实现本发明目的的技术方案是:一种金字塔排序算法,包括以下步骤:
①、对n个数据进行排序时,先定义一个具有n个单元的a数组,然后找到一个整数m,m为2的整数次幂,并且m/2<n≤m;
②、定义一个具有m个单元的b数组,b数组构成金字塔的塔基;再定义一个具有m个单元的c数组,c数组构成金字塔的塔身;
③、对c数组进行初始化,将需要排序的n个数据放入b数组中,并在b数组中放入m-n个最小值数据,该最小值数据为n个数据中的最小值数据,形成m/2对相邻数据;然后将其逐一比较,将相对大数的下标放入c数组的m/2~m-1单元中,此过程形成金字塔第1层塔身;
④、从m-1开始,逐个比较b[c[m-1]]和b[c[m-2]]、b[c[m-3]]和b[c[m-4]]、……、b[c[m/2+1]]和b[c[m/2]],并将相对大数的下标放入c[m/2-1]、c[m/2-2]、……、c[m/4]中,依此类推形成金字塔第2、第3……乃至最高一层塔身,由此构建整个塔身,最后整个b数组最大值数据的下标会被放入c[1]中;
⑤、为步骤④得到的b数组中的最大值数据赋以最小值;
⑥、重复步骤④和步骤⑤,从而不断找出b数组中的最大值,并将其逐个放入a[0]、a[1]、a[2]……,完成排序。
所述步骤①中整数m的找寻方法为:给一个变量赋值为1,然后比较该变量和n的值,若它小于n,则将其乘以2,再次进行比较它和n的值,……,直到该数据大于等于n为止,此时该变量的值即为m。
所述步骤③中的相邻数据是指下标为奇数的数据与其前面的数据为相邻数据,与其后面的数据不是相邻数据。
采用了上述技术方案,本发明具有以下的有益效果:本发明在通常情况下的排序速度略低于快速排序,但是在待排序序列基本有序情况下,本发明的排序速度明显优于快速排序,并且在对待排序元素为较复杂的数据结构进行排序的情况下,本发明的排序速度明显优于堆排序。
具体实施方式
(实施例1)
本实施例的金字塔排序算法,包括以下步骤:
①、对n个数据进行排序时,先定义一个具有n个单元的a数组,然后找到一个整数m,m为2的整数次幂,并且m/2<n≤m。
整数m的找寻方法为:给一个变量赋值为1,然后比较该变量和n的值,若它小于n,则将其乘以2,再次进行比较它和n的值,……,直到该数据大于等于n为止,此时该变量的值即为m。
②、定义一个具有m个单元的b数组,b数组构成金字塔的塔基;再定义一个具有m个单元的c数组,c数组构成金字塔的塔身。
③、对c数组进行初始化,将需要排序的n个数据放入b数组中,并在b数组中放入m-n个最小值数据,该最小值数据为n个数据中的最小值数据,形成m/2对相邻数据;然后将其逐一比较,将相对大数的下标放入c数组的m/2~m-1单元中,此过程形成金字塔第1层塔身。
相邻数据是指下标为奇数的数据与其前面的数据为相邻数据,与其后面的数据不是相邻数据,即b[2i]和b[2i+1]为相邻数据(其中i为整数),而b[2*i]和b[2*i-1]不是相邻数据。比如b[0]和b[1]是相邻数据,而b[1]和b[2]不是相邻数据。
④、从m-1开始,逐个比较b[c[m-1]]和b[c[m-2]]、b[c[m-3]]和b[c[m-4]]、……、b[c[m/2+1]]和b[c[m/2]],并将相对大数的下标放入c[m/2-1]、c[m/2-2]、……、c[m/4]中,依此类推形成金字塔第2、第3……乃至最高一层塔身,由此构建整个塔身,最后整个b数组最大值数据的下标会被放入c[1]中。
⑤、为步骤④得到的b数组中的最大值数据赋以最小值。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于常州信息职业技术学院,未经常州信息职业技术学院许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201510975288.9/2.html,转载请声明来源钻瓜专利网。
- 上一篇:体外再现体内反应的系统
- 下一篇:一种精确混合谱预测方法
- 同类专利
- 专利分类
G06F 电数字数据处理
G06F19-00 专门适用于特定应用的数字计算或数据处理的设备或方法
G06F19-10 .生物信息学,即计算分子生物学中的遗传或蛋白质相关的数据处理方法或系统
G06F19-12 ..用于系统生物学的建模或仿真,例如:概率模型或动态模型,遗传基因管理网络,蛋白质交互作用网络或新陈代谢作用网络
G06F19-14 ..用于发展或进化的,例如:进化的保存区域决定或进化树结构
G06F19-16 ..用于分子结构的,例如:结构排序,结构或功能关系,蛋白质折叠,结构域拓扑,用结构数据的药靶,涉及二维或三维结构的
G06F19-18 ..用于功能性基因组学或蛋白质组学的,例如:基因型–表型关联,不均衡连接,种群遗传学,结合位置鉴定,变异发生,基因型或染色体组的注释,蛋白质相互作用或蛋白质核酸的相互作用