基数排序 java实现

来源:互联网 发布:avast扫描慢 知乎 编辑:程序博客网 时间:2024/05/16 12:12
package sort;
//基数排序:稳定排序
public class RadixSort {


// d为数据长度,根据数据长度排几次序
private static int[] radixSorting(int[] arr, int d) {
for (int i = 0; i < d; i++) {
arr = countingSort(arr, i); // 依次对各位数字排序(直接用计数排序的变体)
}
return arr;
}


// 利用计数排序对元素的每一位进行排序
private static int[] countingSort(int[] arr, int expIndex) {
int k = 9;
int[] b = new int[arr.length];
int[] c = new int[k + 1]; // 标记位,确定元素所在b数组中的位置


for (int i = 0; i < arr.length; i++) {
int d = getBitData(arr[i], expIndex);
c[d]++;
}
for (int i = 1; i <= k; i++) {
c[i] += c[i - 1];   //c[i]的值用于表示元素i所在b数组中的位置
}
for (int i = arr.length - 1; i >= 0; i--) {
int d = getBitData(arr[i], expIndex);
b[c[d] - 1] = arr[i];// C[d]-1 就代表d在b的位置
c[d]--;
}
return b;
}


// 获取data指定位的数
private static int getBitData(int data, int expIndex) {
while (data != 0 && expIndex > 0) {
data /= 10;
expIndex--;
}
return data % 10;
}
//数组打印函数
public static void printsort(int a[])
{
for(int k=0;k<a.length;k++)
System.out.println(a[k]);
}


public static void main(String[] args) {
// TODO Auto-generated method stub
int[] arr = new int[] { 189, 274, 58, 835, 751, 235, 774, 690, 88, 79,69 };

int b[]=radixSorting(arr, 3);
printsort(b);
}


}
0 0
原创粉丝点击