接上一篇文章,還是那個題目,用基數排序來實現。不足之處希望各位前輩指正
題目:給定一個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>
補充說明:排序算法是否穩定指的是數組中重復元素在排序前后的相對位置是否發生改變,若不改變則算法穩定,否則不穩定。
穩定的排序算法有:冒泡排序、插入排序、計數排序、基數排序和歸并排序
不穩定的排序算法有:選擇排序、快速排序、希爾排序和