展开全部
import java.util.ArrayList;
import java.util.List;
public class Sort {
/**
* @param args
*/
public static void main(String[] args) {
e69da5e6ba903231313335323631343130323136353331333337623533// TODO Auto-generated method stub
String[] nums = { "100A", "98.5", "98.5A", "34", "52", "100", "98",
"98.5B" };
// 冒泡排序法排序
for (int i = 0; i
for (int j = 0; 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
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
System.out.println(nums[i]);
}
}
}
我为了赋值方便,用的是String数组,但是跟用list没有区别,方法还是一样的,只是获取长度的时候调的方法不同。数组用.length, list用的是.size()。