1. 程式人生 > >鏈式基數排序_對整數序列進行排序,低關鍵字優先的基數排序演算法很有創新。

鏈式基數排序_對整數序列進行排序,低關鍵字優先的基數排序演算法很有創新。

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);
}