import?java.util.List;
public?class?Sort?{
/**
?*?@param?args
?*/
public?static?void?main(String[]?args)?{
//?TODO?Auto-generated?method?stub
String[]?nums?=?{?"100A",?"98.5",?"98.5A",?"34",?"52",?"100",?"98",
"98.5B"?};
//?冒泡排序法排序
for?(int?i?=?0;?i?<?nums.length?-?1;?i++)?{
for?(int?j?=?0;?j?<?nums.length?-?i?-?1;?j++)?{
double?num1;//?前壹個數字去字母後的數值
boolean?char1?=?false;?//?前壹個數字是否含有字母
int?ascii1?=?0;//?前壹個數字所含字母的ASCII碼
//?獲取每個數字的最後壹位,判斷是否為大寫字母(判斷其ASCII碼是否在65到90之間)
if?((int)?(nums[j].toCharArray()[nums[j].length()?-?1])?>=?65
&&?(int)?(nums[j].toCharArray()[nums[j].length()?-?1])?<=?90)?{
num1?=?Double.parseDouble(nums[j].substring(0,
nums[j].length()?-?1));
char1?=?true;
ascii1?=?(int)?(nums[j].toCharArray()[nums[j].length()?-?1]);
}?else?{
num1?=?Double.parseDouble(nums[j]);
}
double?num2;//?後壹個數字去字母後的數值
boolean?char2?=?false;?//?後壹個數字是否含有字母
int?ascii2?=?0;//?後壹個數字所含字母的ASCII碼
//?獲取每個數字的最後壹位,判斷是否為大寫字母(判斷其ASCII碼是否在65到90之間)
if?((int)?(nums[j?+?1].toCharArray()[nums[j?+?1].length()?-?1])?>=?65
&&?(int)?(nums[j?+?1].toCharArray()[nums[j?+?1]
.length()?-?1])?<=?90)?{
num2?=?Double.parseDouble(nums[j?+?1].substring(0,
nums[j?+?1].length()?-?1));
char2?=?true;
ascii2?=?(int)?(nums[j?+?1].toCharArray()[nums[j?+?1]
.length()?-?1]);
}?else?{
num2?=?Double.parseDouble(nums[j?+?1]);
}
//?從大到小排序
if?(num1?<?num2)?{
String?temp?=?nums[j];
nums[j]?=?nums[j?+?1];
nums[j?+?1]?=?temp;
}?else?if?(num1?==?num2)?{//?數值相等則判斷是否有字母以及字母的順序
//?如果兩個都有字母,則判斷順序
if?(char1?&&?char2)?{
//?按ASCII碼從小到大排列(即從A到Z排列)
if?(ascii1?>?ascii2)?{
String?temp?=?nums[j];
nums[j]?=?nums[j?+?1];
nums[j?+?1]?=?temp;
}
}?else?if?(!char1?&&?char2)?{//?如果後面壹個數字有字母
String?temp?=?nums[j];
nums[j]?=?nums[j?+?1];
nums[j?+?1]?=?temp;
}
}
}
}
for?(int?i?=?0;?i?<?nums.length;?i++)?{
System.out.println(nums[i]);
}
}
}
我為了賦值方便,用的是String數組,但是跟用list沒有區別,方法還是壹樣的,只是獲取長度的時候調的方法不同。數組用.length, list用的是.size()。