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}
运行结果:
