本帖最后由 whs_nk 于 2013-3-13 18:32 编辑
看视频排序时老是英文字符串排序,突然想到这样一个问题:对十以内形如{"二","三","一","四"}的中文数字字符串序列进行排序,要求排序后为一二三四
闲着的时候写了下面这个比较粗糙的思想及对应的代码。想知道其他方法,大家练练手哦
/*
要求:对十以内形如{"二","三","一","四"}的中文数字字符串序列进行排序,要求排序后为一二三四
算法思想:
1、创建表 String[] table = {"一","二","三","四","五","六","七","八","九","十",};
2、根据所给字符串数组strArr查表table,并用整型数组sbd[10]存储给定字符串数组strArr
中的元素在表中对应的脚标。
3、对sbd[10]中的元素进行排序,排序后传递给整型数组aa,再根据aa中的元素(即排好序后的脚标)
查table表,将对应的元素存入StringBuilder sbd中(或进一步String str = sbd.toString();),最后打印。
*/
class ChNumSort
{
public static void main(String[] args)
{
String[] strArr = {"二","三","一","四"};
chNumSort(strArr);
}
public static void chNumSort(String[] str)
{
String[] table = {"一","二","三","四",
"五","六","七","八","九","十",};
int[] sbd = new int[10];
/*查找中文序列str所对应的表中的脚标,存入sbd中
并返回sbd数组的实际存储长度k*/
int k = findIndex(table,str,sbd);
int len = str.length;
int[] aa = sortIndex(sbd,k);//接收排序后的值为脚标的数组
sortCh(aa,len,table);
}
public static int findIndex(String[] table,String str[],int[] sbd)
{
/*查找中文序列str所对应的表中的脚标,存入sbd中
并返回sbd数组的实际存储长度k
*/
int len = str.length;
int k = 0;
for (int i=0;i<len ;i++)
for (int j=0;j<10 ;j++ )
if(table[j].compareTo(str)==0)
sbd[k++]=j;
return k;
}
public static int[] sortIndex(int[] str,int len)
{
//对长度为len的存储脚标的数组str进行排序
for (int i=0;i<len-1 ;i++ )
{
int flag = i;//用于标记每次循环比较时最小字符串的脚标
int temp = -1;
for (int j=i+1;j<len ;j++ )
if(str[flag]>str[j])//求小值
flag=j;
if(flag!=i)
{
temp = str;
str=str[flag];
str[flag]=temp;
}
}
return str;
}
public static void sortCh(int[] aa,int len,String[] strArr)
{
/*根据排好序的脚标数组aa查表,将strArr表中脚标为aa的字符串
存入到StringBuilder sbd之中,再将其转换成字符串str打印输出
*/
StringBuilder sbd = new StringBuilder();
for (int i=0;i<len ;i++)
sbd.append(strArr[aa]);
//String str = sbd.toString();
System.out.println(sbd);
}
}
|