java 分组 散列排序

Wesley13
• 阅读 486
package test;
import java.util.ArrayList;
import java.util.List;

import org.junit.Test;

/**
 * 散列排序
 * @author haopeng
 *
 */
public class HashSort {
    
    private  Integer group=6; //分组数
    private  Integer groupNum=6; //每组做多元素数
    /**
     * 将gs变为二维数组(将数进行分组)
     * @return
     */
    public Integer[][] hash(Integer gs[]){
        Integer[][] tgs=new Integer[group][groupNum];
        int j=0;
        int k=0;
        tgs[j][k]=gs[0];
        for(int i=1;i<gs.length;i++){
            if(gs[i]==tgs[j][k]){ //下一个值与tgs最后一个值相等
                if(k>=groupNum-1){
                    continue;
                }
                k++;
            }else{
                j++;
                k=0;
                if(j>=group){
                    break;
                }
            }
            tgs[j][k]=gs[i];
        }
        return tgs;
    }
    
    /**
     * 打印二维数组 
     * @param tgs
     */
    public void printArray(Integer[][] tgs){
        for(int i=0;i<tgs.length;i++){
            for(int j=0;j<tgs[i].length;j++){
                System.err.print(tgs[i][j]+"\t");
            }
            System.err.println("");
        }
    }
    
    /**
     * 将列散的二维数组排序
     * @param tgs
     * @return
     */
    public List<Integer> sort(Integer[][] tgs){
        List<Integer> l=new ArrayList<>();
        for(int i=0;i<groupNum;i++){
            for(int j=0;j<tgs.length;j++){
                if(tgs[j][i]!=null){
                    l.add(tgs[j][i]);
                }
            }
        }
        return l;
    }
    
    @Test
    public void start(){
        Integer[] gs={5,5,5,5,5,5,4,4,4,4,6,6,6,6,6,2,2,2,1,1,1,1,1,0,0};
        Integer[][] tgs=hash(gs);
        printArray(tgs);//打印二维数组
        System.err.println(sort(tgs)); //输出排序后的数组
    }
}

运行结果:

java 分组 散列排序

点赞
收藏
评论区
推荐文章
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Wesley13 Wesley13
2年前
java容器之HashMap
HashMap采用了数组和链表的数据结构,能在查询和修改方便继承了数组的线性查找和链表的寻址修改,数组是HashMap的主体,链表则是主要为了解决哈希冲突而存在的。解决哈希冲突的三个方法:a.开放定址法  又被称为再散列法,包括线性探测再散列、二次探测再散列、伪随机探测再散列b.再哈希法  地址冲突后,对哈希结果再次进行哈希,直到
Stella981 Stella981
2年前
Python数据结构与算法——散列(Hash)
!(https://oscimg.oschina.net/oscnet/19a7428dd9c64d149aa474d3aabe80ce.png)点击上方“蓝字”关注我们散列(Hash)对于一组数据项,顺序查找的时间复杂度是O(n),二分查找是O(logn),而对于散列的数据结构,
Stella981 Stella981
2年前
Redis散列(Hash)的相关命令
散列就像一个减配的Redis内部及其类似Java的Map内容就是key:value结构hash类型在面向对象编程的运用中及其适合,因为它可以直接保存编程语言中的实体类关系增hsethsetkeyfieldvalue设置key指定的哈希集字段的值127.0.0.1:6379h
Stella981 Stella981
2年前
Hash算法解决冲突的四种方法
Hash算法解决冲突的方法一般有以下几种常用的解决方法 1,开放定址法: 所谓的开放定址法就是一旦发生了冲突,就去寻找下一个空的散列地址,只要散列表足够大,空的散列地址总能找到,并将记录存入 公式为:fi(key)(f(key)di)MODm(di1,2,3,……,m1) ※用开放定址法解决冲突的做法是:当冲突发
Wesley13 Wesley13
2年前
MySQL数据查询(重点)
1.查询所有列  \为所有列select\fromtable\_name;2.查询指定列selectid,agefromtable\_name;3.查询时添加常量列本次查询有效,不会添加到表中,只显示 可以用as来命名本列名select'java0328'fromtable\_name;
Wesley13 Wesley13
2年前
mysql——GROUP BY和HAVING
GROUPBY语法可以根据给定数据列的每个成员对查询结果进行分组统计,最终得到一个分组汇总表。select子句中的列名必须为分组列或列函数,列函数对于groupby子句定义的每个组返回一个结果。某个员工信息表结构和数据如下:  id  name  dept  salary  edlevel     hiredate   1  张
Wesley13 Wesley13
2年前
1.8 可变、不可变数据与hash
HASH   Hash,一般翻译做'散列',也有直接音译为'哈希'的,就是把任意长度的输入,通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转化是一种压缩映射,也就是,散列值得空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来唯一确定输入值。简单的说就是一种将任意长度的消息压
Wesley13 Wesley13
2年前
Java编程思想——第17章 容器深入研究(一)
  这一章将学习散列机制是如何工作的,以及在使用散列容器时怎么样编写hashCode()和equals()方法。一、容器分类  先上两张图来概况完整的容器分类再细说都为什么会有那些特性。!(https://oscimg.oschina.net/oscnet/d5380aa444594d371f26d44d237dc4eb46b.p
V-275670029 V-275670029
1年前
哈希竞猜游戏的原理
Hash一般被翻译成“散列”,也可直接音译为“哈希”,就是把任意长度的输入(又叫做预映射,preimage),通过散列算法,变换成固定长度的输出,该输出就是散列值。  这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来唯一的确定输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消