一种金字塔排序算法制造技术

技术编号:13205325 阅读:68 留言:0更新日期:2016-05-12 12:29
本发明专利技术公开了一种金字塔排序算法,先找到一个为2的整数次幂的整数m,m/2<n≤m;然后将需要排序的n个数据放入b数组中;然后逐一比较b数组中相邻数据,将相对大数的下标放入c数组的m/2~m-1单元中;然后逐个比较b[c[m-1]]~b[c[m/2]]中的相邻数据,并将相对大数的下标放入c[m/2-1]~c[m/4]中,依此类推,最后整个b数组最大值数据的下标会被放入c[1]中;然后不断找出b数组中的最大值,完成排序。在待排序序列基本有序情况下,本发明专利技术的排序速度明显优于快速排序,并且在对待排序元素为较复杂的数据结构进行排序的情况下,本发明专利技术的排序速度明显优于堆排序。

【技术实现步骤摘要】

本专利技术涉及。
技术介绍
当前,对大量数据进行排序时,通常选择的是快速排序算法。快速排序是性能优异的排序算法,但是若快速排序基准值选择不当或待排序序列基本有序时,快速排序的性能会大幅度降低。而堆排序在待排序序列基本有序的情况下比快速排序快,但是堆排序也有缺点:当待排序元素为复杂的数据结构时,由于堆排序中无效移动次数比较多,对堆排序性能也有较大影响。
技术实现思路
本专利技术的目的是提供,在待排序序列基本有序情况下以及待排序元素具有复杂的数据结构的情况下,提升排序速度。实现本专利技术目的的技术方案是:,包括以下步骤:①、对η个数据进行排序时,先定义一个具有η个单元的a数组,然后找到一个整数m,m为2的整数次幂,并且m/2<n < m;②、定义一个具有m个单元的b数组,b数组构成金字塔的塔基;再定义一个具有m个单元的c数组,c数组构成金字塔的塔身;③、对c数组进行初始化,将需要排序的η个数据放入b数组中,并在b数组中放入m_n个最小值数据,该最小值数据为η个数据中的最小值数据,形成m/2对相邻数据;然后将其逐一比较,将相对大数的下标放入c数组的m/2?m-Ι单元中,此过程形成金字塔第I层塔身;@、从!11-1开始,逐个比较13]和13]、13]和13 ]、......、b]和b],并将相对大数的下标放入c、c、......、c中,依此类推形成金字塔第2、第3……乃至最高一层塔身,由此构建整个塔身,最后整个b数组最大值数据的下标会被放入c 中;⑤、为步骤④得到的b数组中的最大值数据赋以最小值;⑥、重复步骤④和步骤⑤,从而不断找出b数组中的最大值,并将其逐个放入a、a、a......,完成排序。所述步骤①中整数m的找寻方法为:给一个变量赋值为I,然后比较该变量和η的值,若它小于η,则将其乘以2,再次进行比较它和η的值,……,直到该数据大于等于η为止,此时该变量的值即为m。所述步骤③中的相邻数据是指下标为奇数的数据与其前面的数据为相邻数据,与其后面的数据不是相邻数据。采用了上述技术方案,本专利技术具有以下的有益效果:本专利技术在通常情况下的排序速度略低于快速排序,但是在待排序序列基本有序情况下,本专利技术的排序速度明显优于快速排序,并且在对待排序元素为较复杂的数据结构进行排序的情况下,本专利技术的排序速度明显优于堆排序。【具体实施方式】(实施例1)本实施例的金字塔排序算法,包括以下步骤:①、对η个数据进行排序时,先定义一个具有η个单元的a数组,然后找到一个整数m,m为2的整数次幂,并且m/2<n < m。整数m的找寻方法为:给一个变量赋值为I,然后比较该变量和η的值,若它小于n,则将其乘以2,再次进行比较它和η的值,……,直到该数据大于等于η为止,此时该变量的值即为m0②、定义一个具有m个单元的b数组,b数组构成金字塔的塔基;再定义一个具有m个单元的c数组,c数组构成金字塔的塔身。③、对C数组进行初始化,将需要排序的η个数据放入b数组中,并在b数组中放入m_n个最小值数据,该最小值数据为η个数据中的最小值数据,形成m/2对相邻数据;然后将其逐一比较,将相对大数的下标放入c数组的m/2?m-Ι单元中,此过程形成金字塔第I层塔身。相邻数据是指下标为奇数的数据与其前面的数据为相邻数据,与其后面的数据不是相邻数据,即b和b为相邻数据(其中i为整数),而b和b不是相邻数据。比如b 和b 是相邻数据,而b 和b 不是相邻数据。 (|)、从111-1开始,逐个比较13]和13]、13]和13 ]、......、b]和b],并将相对大数的下标放入c、c、......、c中,依此类推形成金字塔第2、第3……乃至最高一层塔身,由此构建整个塔身,最后整个b数组最大值数据的下标会被放入c 中。⑤、为步骤④得到的b数组中的最大值数据赋以最小值。⑥、重复步骤④和步骤⑤,从而不断找出b数组中的最大值,并将其逐个放入a、a、a......,完成排序。以上所述的具体实施例,对本专利技术的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本专利技术的具体实施例而已,并不用于限制本专利技术,凡在本专利技术的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本专利技术的保护范围之内。【主权项】1.,其特征在于:包括以下步骤: ①、对η个数据进行排序时,先定义一个具有η个单元的a数组,然后找到一个整数m,m为2的整数次幂,并且m/2<n<m; ②、定义一个具有m个单元的b数组,b数组构成金字塔的塔基;再定义一个具有m个单元的c数组,c数组构成金字塔的塔身; ③、对c数组进行初始化,将需要排序的η个数据放入b数组中,并在b数组中放入m-n个最小值数据,该最小值数据为η个数据中的最小值数据,形成m/2对相邻数据;然后将其逐一比较,将相对大数的下标放入c数组的m/2?m-Ι单元中,此过程形成金字塔第I层塔身; ④、从m-Ι开始,逐个比较b HPb ]、b]和b ]、......、b]和b],并将相对大数的下标放入c、c、......、c中,依此类推形成金字塔第2、第3……乃至最高一层塔身,由此构建整个塔身,最后整个b数组最大值数据的下标会被放入c 中; ⑤、为步骤④得到的b数组中的最大值数据赋以最小值; ⑥、重复步骤④和步骤⑤,从而不断找出b数组中的最大值,并将其逐个放入a、a、a……,完成排序。2.根据权利要求1所述的,其特征在于:所述步骤①中整数m的找寻方法为:给一个变量赋值为I,然后比较该变量和η的值,若它小于n,则将其乘以2,再次进行比较它和η的值,……,直到该数据大于等于η为止,此时该变量的值即为m。3.根据权利要求1所述的,其特征在于:所述步骤③中的相邻数据是指下标为奇数的数据与其前面的数据为相邻数据,与其后面的数据不是相邻数据。【专利摘要】本专利技术公开了,先找到一个为2的整数次幂的整数m,m/2<n≤m;然后将需要排序的n个数据放入b数组中;然后逐一比较b数组中相邻数据,将相对大数的下标放入c数组的m/2~m-1单元中;然后逐个比较b]~b]中的相邻数据,并将相对大数的下标放入c~c中,依此类推,最后整个b数组最大值数据的下标会被放入c中;然后不断找出b数组中的最大值,完成排序。在待排序序列基本有序情况下,本专利技术的排序速度明显优于快速排序,并且在对待排序元素为较复杂的数据结构进行排序的情况下,本专利技术的排序速度明显优于堆排序。【IPC分类】G06F19/00【公开号】CN105574344【申请号】CN201510975288【专利技术人】吕勇, 刘斌 【申请人】常州信息职业技术学院【公开日】2016年5月11日【申请日】2015年12月22日本文档来自技高网...

【技术保护点】
一种金字塔排序算法,其特征在于:包括以下步骤:①、对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]……,完成排序。...

【技术特征摘要】

【专利技术属性】
技术研发人员:吕勇刘斌
申请(专利权)人:常州信息职业技术学院
类型:发明
国别省市:江苏;32

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1