实现一个算法对多个字符串进行排序,不能使用现有的类,在排序中,字符串“Bc”,“Ad”,“aC”,“Hello”,“Xman”,“little”,“During”,“day”能够排序成“Ad”,“aC”,“Bc”,“During”,“day”,“Hello”,“little”,“Xman”,也就是说,在排序的过程中并不是传统的按照字符串排序,在排序中海需要将小写字母一并排序,也就是说a字符串要在B和b之前
调试欢乐多
Ad 在 aC 之前,先比较首字母
Ad 在 aC 之前,先比较首字母
在之后 还比较之后的字母吗?
大写的字母排在小写字母之前对吗?
public static void main(String[] args) {
String[] s = {"Bc","Ad","aC","Hello","Xman","little","During","day"};
for(int i =0;i<s.length;i++){
for(int j=i;j<s.length;j++){
if(px(s[i].charAt(0),s[j].charAt(0))){
String aa = "";
aa = s[i];
s[i] = s[j];
s[j] = aa;
}
}
}
for(String k: s){
System.out.println(k);
}
}
private static boolean px(char c1,char c2){
boolean b = true;
if(c1>=97){
c1 -= 32;
}if(c2>=97){
c2 -= 32;
}
if(c1<=c2){
b = false;
}
return b;
}
}
你看下 吧 我英语次 变量名和方法名 很难认. 呵呵! 包含下!
public static void main(String[] args) {
String[] s = {"Bc","Ad","aC","Hello","Xman","little","During","day"};
for(int i =0;i<s.length;i++){
for(int j=i;j<s.length;j++){
if(px(s[i].charAt(0),s[j].charAt(0))){
String aa = "";
aa = s[i];
s[i] = s[j];
s[j] = aa;
}
}
}
for(String k: s){
System.out.println(k);
}
}
private static boolean px(char c1,char c2){
boolean b = true;
if(c1>=97){
c1 -= 32;
}if(c2>=97){
c2 -= 32;
}
if(c1==c2&&c1<=c2){
b = false;
}
if(c1<c2){
b = false;
}
return b;
}
}
刚刚那个逻辑有问题 这个好像比那个强点!
public static void main(String[] args) {
String[] s = {"Bc","Ad","aC","Hello","Xman","little","During","day"};
String s1;
for(int i =0;i<s.length;i++){
for(int j=i;j<s.length;j++){
if(s[i].compareToIgnoreCase(s[j])>0){
s1=s[i];
s[i]=s[j];
s[j]=s1;
}
}
}
String ss;
for(ss:s){
System.out.println(ss);
}
}
}
char[] arr1 = s1.toCharArray(), arr2 = s2.toCharArray();
int index = 0, len1 = arr1.length, len2 = arr2.length;
int len = len1 < len2 ? len1 : len2;
while (index < len) {
char c1 = arr1[index], c2 = arr2[index];
char c1_ = (char) (c1 >= 'a' ? c1 - ('a' - 'A') : c1);
char c2_ = (char) (c2 >= 'a' ? c2 - ('a' - 'A') : c2);
if (c1_ == c2_) {
if (c1 != c2)
return c1 - c2;
} else
return c1_ - c2_;
index++;
}
if (len1 == len2)
return 0;
else if (len1 > len2)
return arr1[len];
else
return -arr2[len];
}public static void sort(String[] src) {
String temp;
for (int i = 0; i < src.length - 1; i++) {
for (int j = 0; j < src.length - i - 1; j++) {
if (compare(src[j], src[j + 1]) > 0) {
temp = src[j];
src[j] = src[j + 1];
src[j + 1] = temp;
}
}
}
}public static void main(String[] args) {
String[] s = { "Bc", "Ad", "aC", "Hello", "Xman", "little", "During",
"day" };
System.out.println("Before sort: " + Arrays.toString(s));
sort(s);
System.out.println("After sort: " + Arrays.toString(s));
}
int[][] arr = new int[src.length][2];
int count = 0, index = 0;
arr[0][0] = 0;
arr[0][1] = src.length - 1;
while (index <= count) {
int left = arr[index][0];
int right = arr[index][1];
int[] dir = { 0, 1 };
int i = left, j = right;
String temp;
while (i < j) {
if (compare(src[i], src[j]) > 0) {
temp = src[i];
src[i] = src[j];
src[j] = temp;
dir[0] = 1 - dir[0];
dir[1] = 1 - dir[1];
}
i += dir[0];
j -= dir[1];
}
if (j - left > 1) {
count++;
arr[count][0] = left;
arr[count][1] = j - 1;
}
if (right - i > 1) {
count++;
arr[count][0] = i + 1;
arr[count][1] = right;
}
index++;
}
}
改一个排序算法……#15的是冒泡,这个是无递归快排……
String[] s = {"Bc","Ad","aa","AC","Hello","Xman","little","Da","During","dfy"};
就会出错
compare(String s1, String s2)中的这段代码不懂,帮忙解释下
if (len1 == len2)
return 0;
else if (len1 > len2)
return arr1[len];
else
return -arr2[len];
谢了。
所以这一段代码是对s1是s2的子串或s2是s1的子串的情况下做处理
在这个前提下,如果len1==len2,说明两个字符串的确相同;如果len1<len2,那么s1是s2的子串,s1<s2;如果len1>len2,那么s2是s1的子串,s1>s2
其实这里我定了默认条件都是英文字符,如果有其他字符可能会有问题