java 分组 散列排序

1package test; 2import java.util.ArrayList; 3import java.util.List; 4 5import org.junit.Test; 6 7/** 8 * 散列排序 9 * @author haopeng 10 * 11 */ 12public class HashSort { 13 14 private Integer group=6; //分组数 15 private Integer groupNum=6; //每组做多元素数 16 /** 17 * 将gs变为二维数组(将数进行分组) 18 * @return 19 */ 20 public Integer[][] hash(Integer gs[]){ 21 Integer[][] tgs=new Integer[group][groupNum]; 22 int j=0; 23 int k=0; 24 tgs[j][k]=gs[0]; 25 for(int i=1;i<gs.length;i++){ 26 if(gs[i]==tgs[j][k]){ //下一个值与tgs最后一个值相等 27 if(k>=groupNum-1){ 28 continue; 29 } 30 k++; 31 }else{ 32 j++; 33 k=0; 34 if(j>=group){ 35 break; 36 } 37 } 38 tgs[j][k]=gs[i]; 39 } 40 return tgs; 41 } 42 43 /** 44 * 打印二维数组 45 * @param tgs 46 */ 47 public void printArray(Integer[][] tgs){ 48 for(int i=0;i<tgs.length;i++){ 49 for(int j=0;j<tgs[i].length;j++){ 50 System.err.print(tgs[i][j]+"\t"); 51 } 52 System.err.println(""); 53 } 54 } 55 56 /** 57 * 将列散的二维数组排序 58 * @param tgs 59 * @return 60 */ 61 public List<Integer> sort(Integer[][] tgs){ 62 List<Integer> l=new ArrayList<>(); 63 for(int i=0;i<groupNum;i++){ 64 for(int j=0;j<tgs.length;j++){ 65 if(tgs[j][i]!=null){ 66 l.add(tgs[j][i]); 67 } 68 } 69 } 70 return l; 71 } 72 73 @Test 74 public void start(){ 75 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}; 76 Integer[][] tgs=hash(gs); 77 printArray(tgs);//打印二维数组 78 System.err.println(sort(tgs)); //输出排序后的数组 79 } 80}

运行结果:

点赞
收藏

评论区

加载中...

相关推荐

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

java容器之HashMap

HashMap采用了数组和链表的数据结构,能在查询和修改方便继承了数组的线性查找和链表的寻址修改,数组是HashMap的主体,链表则是主要为了解决哈希冲突而存在的。解决哈希冲突的三个方法:a.开放定址法  又被称为再散列法,包括线性探测再散列、二次探测再散列、伪随机探测再散列b.再哈希法  地址冲突后,对哈希结果再次进行哈希,直到

Python数据结构与算法——散列(Hash)

!(https://oscimg.oschina.net/oscnet/19a7428dd9c64d149aa474d3aabe80ce.png)点击上方“蓝字”关注我们散列(Hash)对于一组数据项,顺序查找的时间复杂度是O(n),二分查找是O(logn),而对于散列的数据结构,

Redis散列(Hash)的相关命令

散列就像一个减配的Redis内部及其类似Java的Map内容就是key:value结构hash类型在面向对象编程的运用中及其适合,因为它可以直接保存编程语言中的实体类关系增hsethsetkeyfieldvalue设置key指定的哈希集字段的值127.0.0.1:6379h

Hash算法解决冲突的四种方法

Hash算法解决冲突的方法一般有以下几种常用的解决方法 1,开放定址法: 所谓的开放定址法就是一旦发生了冲突,就去寻找下一个空的散列地址,只要散列表足够大,空的散列地址总能找到,并将记录存入 公式为:fi(key)(f(key)di)MODm(di1,2,3,……,m1) ※用开放定址法解决冲突的做法是:当冲突发