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

 
  
  
  
 