java 分组 散列排序

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)); //输出排序后的数组
	}
}

运行结果:

150213_rN2I_162199.png

转载于:https://my.oschina.net/haopeng/blog/686627

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值