package cn.itcast.sort;
import java.util.ArrayList;
import java.util.List;
/**
*
* 请对整数序列进行排序。
随机产生1000个整数,其中整数的范围0~9999
可以用十进制的每个位为关键字。排序时使用十个动态数组为临时空间,进行分配和收集。
采用低关键字优先的基数排序完成对整数序列的排序任务。
注意体会仅仅依靠分配、收集的手段即可完成排序。
*
*/
public class ListBaseSort {
public static void main(String[] args) {
// TODO Auto-generated method stub
List data = new ArrayList();
//填充随机值,这里的随机数范围是0~9999;
for(int i=0; i<1000; i++)
data.add((int)(Math.random() * 10000));
//准备十个桶
List[] base = new ArrayList[10];
for(int i=0; i<base.length; i++) base[i] = new ArrayList();
//从低到高,分配与收集,k是为数,1,10,100,1000
//这里先是按照个,十,百,千的顺序分成四组,每组再分配10个0~9动态数组空间分别按高位排序,
//最后递归排序次位数据。
for(int k=1; k<=1000; k*=10){
for(int i=0; i<data.size(); i++)
//按关键字分配到桶里
base[(Integer)data.get(i)/k%10].add(data.get(i));
data.clear();
for(int i=0; i<base.length; i++)
data.addAll(base[i]); //收集
for(int i=0; i<base.length; i++)
base[i].clear(); //清桶
}
System.out.println(data);
}
import java.util.ArrayList;
import java.util.List;
/**
*
* 请对整数序列进行排序。
随机产生1000个整数,其中整数的范围0~9999
可以用十进制的每个位为关键字。排序时使用十个动态数组为临时空间,进行分配和收集。
采用低关键字优先的基数排序完成对整数序列的排序任务。
注意体会仅仅依靠分配、收集的手段即可完成排序。
*
*/
public class ListBaseSort {
public static void main(String[] args) {
// TODO Auto-generated method stub
List data = new ArrayList();
//填充随机值,这里的随机数范围是0~9999;
for(int i=0; i<1000; i++)
data.add((int)(Math.random() * 10000));
//准备十个桶
List[] base = new ArrayList[10];
for(int i=0; i<base.length; i++) base[i] = new ArrayList();
//从低到高,分配与收集,k是为数,1,10,100,1000
//这里先是按照个,十,百,千的顺序分成四组,每组再分配10个0~9动态数组空间分别按高位排序,
//最后递归排序次位数据。
for(int k=1; k<=1000; k*=10){
for(int i=0; i<data.size(); i++)
//按关键字分配到桶里
base[(Integer)data.get(i)/k%10].add(data.get(i));
data.clear();
for(int i=0; i<base.length; i++)
data.addAll(base[i]); //收集
for(int i=0; i<base.length; i++)
base[i].clear(); //清桶
}
System.out.println(data);
}
}
结果: