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