堆排序最优java代码 堆排序程序( 五 )


int index= getNthDigit(sorted[j],nth);
util.get(index).add(sorted[j]);
}
}
}
public int getNthDigit(double num,int nth){
String nn= Integer.toString((int)num);
int len= nn.length();
if(len=nth){
return Character.getNumericValue(nn.charAt(len-nth));
}else{
return 0;
}
}
public void collect(double [] sorted){
int k=0;
for(int j=0;j10;j++){
int len= util.get(j).size();
if(len0){
for(int i=0;ilen;i++){
sorted[k++]= util.get(j).get(i);
}
}
}
util=null;
}
public int getKeyNum(double [] sorted){
double max= Double.MIN_VALUE;
for(int j=0;jsorted.length;j++){
if(sorted[j]max){
max= sorted[j];
}
}
return Integer.toString((int)max).length();
}
public void radixSort(double [] sorted){
if(keyNum==-1){
keyNum= getKeyNum(sorted);
}
for(int i=1;i=keyNum;i++){
distribute(sorted,i);
collect(sorted);
}
}
public static void main(String[] args) {
Random random = new Random(6);
int arraysize = 21;
double[] sorted = new double[arraysize];
System.out.print("Before Sort:");
for (int j = 0; jarraysize; j++) {
sorted[j] = (int) (random.nextDouble() * 100);
System.out.print((int) sorted[j] + " ");
}
System.out.println();
RadixSort sorter = new RadixSort();
sorter.radixSort(sorted);
System.out.print("After Sort:");
for (int j = 0; jsorted.length; j++) {
System.out.print((int) sorted[j] + " ");
}
System.out.println();
}
}
//copy而来
java堆排序代码//从a[index]到a[len]除了a[index]外其它元素满足一个堆 , 把a[index]调整到合适位置
//这个堆满足父节点孩子结点,且要保证2*index能取到index的左孩子,
public static void adjustHeap(int[] a,int index,int len){
int scn=a[index];
for(int i=2*index;i=m;i*=2){
if(ima[i]a[i+1])i+=1;
if(!a[i]scn)break;
a[index]=a[i];index=i;
}
a[index]=scn;
}
//数组a从a[1]开始存放元素,如果想从a[0]开始则要调整adjustHeap代码,以便满足完全二叉树
//性质,代码未经测试
public static void heapSort(int[] a){
for(int i=(a.length-1)/2;i0;i--)
adjustHeap(a,i,a.length-1);
int tmp;
for(int i=a.length-1;i1;i--){
tmp=a[i];
a[i]=a[1];
a[1]=tmp;
adjustHeap(a,1,i-1);
}
}
写一个简单的JAVA排序程序//排序
public class Array
{
public static int[] random(int n)//产生n个随机数,返回整型数组
{
if (n0)
{
int table[] = new int[n];
for (int i=0; itable.length; i++)
table[i] = (int)(Math.random()*100);//产生一个0~100之间的随机数
return table;//返回一个数组
}
return null;
}
public static void print(int[] table)//输出数组元素
{
if (table!=null)
for (int i=0; itable.length; i++)
System.out.print(" "+table[i]);
System.out.println();
}
public static void insertSort(int[] table)//直接插入排序
{//数组是引用类型,元素值将被改变
System.out.println("直接插入排序");
for (int i=1; itable.length; i++)//n-1趟扫描
{
int temp=table[i], j;//每趟将table[i]插入到前面已排序的序列中
//System.out.print("移动");
for (j=i-1; j-1temptable[j]; j--)//将前面较大元素向后移动
{
//System.out.print(table[j]+", ");
table[j+1] = table[j];
}
table[j+1] = temp;//temp值到达插入位置
System.out.print("第"+i+"趟: ");
print(table);
}
}
public static void shellSort(int[] table)//希尔排序
{

推荐阅读