基数排序 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);
}
}
//基数排序:稳定排序
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
- 基数排序的java实现
- 基数排序(java实现)
- 基数排序java实现代码
- Java实现基数排序
- 基数排序的 Java 实现
- 基数排序java实现
- 基数排序Java实现
- 基数排序(java实现)
- Java实现基数排序
- 基数排序的java实现
- Java实现基数排序
- Java实现基数排序
- 基数排序之java实现
- 基数排序---JAVA实现
- 基数排序 java代码实现
- 基数排序-java实现
- 基数排序-java实现
- 基数排序 java实现
- xutils注解网络图片
- 使用DHTML技术获取元素和增删改文档中的元素
- 数字图像分析——2017.3.25
- 编写跨浏览器的javascript代码必备[js多浏览器兼容写法]
- linux在vi模式下的常用命令
- 基数排序 java实现
- 文件输入输出
- String数据类型
- CALayer深度解析
- 模板方法模式
- JavaScript的六种继承方式
- ip隐藏方法是什么
- 51nod 1279 扔盘子(思维题)
- Android中SQLite应用详解(很详细)