基数排序算法
来源:互联网 发布:雷电网络 价格 编辑:程序博客网 时间:2024/06/05 21:52
package com.suanfa;
public class RadixSort {
private static String[] month = {"J", "F", "M", "A", "Y", "L", "U", "G", "S", "O", "N", "D"};
private static String[] day = {"F", "S", "T", "O", "I", "M", "E", "G", "N"};
public static void main(String[] args)
{
String[] A = {"DN", "FS", "OI", "SO", "YN", "MN", "JS", "FG", "SM", "OF", "NN", "DO"};
// JS, FS, FG, MN, YN, SO, SM, OF, OI, NN, DO, DN
cu(A);
for(String str:A)
{
System.out.print(str + ", ");
}
}
private static int getIndex(String[] array, String chart)
{
int index = -1;
for(int i = 0; i < 12; i++)
{
if(chart.equals(array[i]))
{
index = i;
break;
}
}
return index;
}
private static void cu(String[] datas)
{
int length=datas.length;
int[] order=new int[length];//用于保存每个桶里有多少个数字
int k = 0;
for(int i = 0; i < 2; i++)
{
String[][] bucket=new String[12][length];//排序桶用于保存每次排序后的结果,这一位上排序结果相同的数字放在同一个桶里
for(String data : datas)
{
int digit = -1;
if(i == 1)
{
digit = getIndex(month, data.charAt(0) + "");
}
else if(i == 0)
{
digit = getIndex(day, data.charAt(1) + "");
}
bucket[digit][order[digit]] = data;
order[digit]++;
}
for(int n=0;n<length;n++)//将前一个循环生成的桶里的数据覆盖到原数组中用于保存这一位的排序结果
{
if(order[n]!=0)//这个桶里有数据,从上到下遍历这个桶并将数据保存到原数组中
{
for(int j=0;j<order[n];j++)
{
datas[k]=bucket[n][j];
k++;
}
}
order[n]=0;//将桶里计数器置0,用于下一次位排序
}
k = 0;
}
}
}
public class RadixSort {
private static String[] month = {"J", "F", "M", "A", "Y", "L", "U", "G", "S", "O", "N", "D"};
private static String[] day = {"F", "S", "T", "O", "I", "M", "E", "G", "N"};
public static void main(String[] args)
{
String[] A = {"DN", "FS", "OI", "SO", "YN", "MN", "JS", "FG", "SM", "OF", "NN", "DO"};
// JS, FS, FG, MN, YN, SO, SM, OF, OI, NN, DO, DN
cu(A);
for(String str:A)
{
System.out.print(str + ", ");
}
}
private static int getIndex(String[] array, String chart)
{
int index = -1;
for(int i = 0; i < 12; i++)
{
if(chart.equals(array[i]))
{
index = i;
break;
}
}
return index;
}
private static void cu(String[] datas)
{
int length=datas.length;
int[] order=new int[length];//用于保存每个桶里有多少个数字
int k = 0;
for(int i = 0; i < 2; i++)
{
String[][] bucket=new String[12][length];//排序桶用于保存每次排序后的结果,这一位上排序结果相同的数字放在同一个桶里
for(String data : datas)
{
int digit = -1;
if(i == 1)
{
digit = getIndex(month, data.charAt(0) + "");
}
else if(i == 0)
{
digit = getIndex(day, data.charAt(1) + "");
}
bucket[digit][order[digit]] = data;
order[digit]++;
}
for(int n=0;n<length;n++)//将前一个循环生成的桶里的数据覆盖到原数组中用于保存这一位的排序结果
{
if(order[n]!=0)//这个桶里有数据,从上到下遍历这个桶并将数据保存到原数组中
{
for(int j=0;j<order[n];j++)
{
datas[k]=bucket[n][j];
k++;
}
}
order[n]=0;//将桶里计数器置0,用于下一次位排序
}
k = 0;
}
}
}
阅读全文
0 0
- 基数排序算法
- 算法-----基数排序
- 基数排序算法
- 基数排序算法
- 基数排序算法
- 基数排序算法
- 算法--基数排序
- 基数排序算法
- [算法] 基数排序
- 基数排序算法
- 基数排序算法
- 算法---基数排序
- 基数排序算法
- 基数排序算法
- 【算法】基数排序
- 基数排序算法
- 基数排序算法
- 基数排序算法
- 代码片段----std::for_each
- ssh pom.xml
- hdu 6085 Rikka with Candies bitset优化计数
- python类与对象part2
- python设计模式之代理模式
- 基数排序算法
- 构建iOS开发环境
- libvirt XLC driver --pass-fds
- 计算机的一些笑话
- [NOIP2016]Day1T3 换座位
- 设置全局参数——定制matplotlib(部分翻译)
- ccf 201703-3 Markdown ( java)
- Javascript边框闪烁提示
- Android解析WindowManager(一)WindowManager体系