接上一篇文章,还是那个题目,用基数排序来实现。不足之处希望各位前辈指正
题目:给定一个int数组A及数组的大小n,请返回排序后的数组。保证元素均小于等于2000。
测试样例:
排序前[1,2,3,5,2,3],6
排序后[1,2,2,3,3,5]
9.基数排序
<code>
import java.util.*;
public class RadixSort {
public int[] radixSort(int[] A, int n) {
// write code here
if(null==A||n<=1)
return A;
radix(A,10,3,n);
return A;
}
private void radix(int[] A, int radix, int d,int n){//传入的d为3(考虑分解为个位十位百位)
int[] temp = new int[n];//临时数组
int[] buckets = new int[radix];//radix为10,按10进制拆分(10个桶)
//循环中rate用于保存当前计算的位,十位时rate=10
for(int i=0,rate=1;i<d;i++){//
Arrays.fill(buckets,0);//buckets数组中全部为0
System.arraycopy(A,0,temp,0,n);//将A中元素复制进临时数组缓存
for(int j=0;j<n;j++){
//计算数据指定位上的子关键字
int subKey = (temp[j]/rate)%radix;
buckets[subKey]++;
}
for(int j=1;j<radix;j++){
buckets[j] = buckets[j]+buckets[j-1];
}
//按子关键字对指定数据进行排序
for(int m=n-1;m>=0;m--){
int subKey = (temp[m]/rate)%radix;
A[--buckets[subKey]] = temp[m];
}
rate *= radix;
}
}
}
</code>
补充说明:排序算法是否稳定指的是数组中重复元素在排序前后的相对位置是否发生改变,若不改变则算法稳定,否则不稳定。
稳定的排序算法有:冒泡排序、插入排序、计数排序、基数排序和归并排序
不稳定的排序算法有:选择排序、快速排序、希尔排序和
网友评论