java实现字母排序,区分大小写

dashan70345 2010-09-09 03:10:52
实现一个算法对多个字符串进行排序,不能使用现有的类,在排序中,字符串“Bc”,“Ad”,“aC”,“Hello”,“Xman”,“little”,“During”,“day”能够排序成“Ad”,“aC”,“Bc”,“During”,“day”,“Hello”,“little”,“Xman”,也就是说,在排序的过程中并不是传统的按照字符串排序,在排序中海需要将小写字母一并排序,也就是说a字符串要在B和b之前
...全文
3223 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhuzeitou 2010-09-13
  • 打赏
  • 举报
回复
len是s1、s2中较短者的长度,如果能走到这一步,说明两个字符串的前len个字符完全相同
所以这一段代码是对s1是s2的子串或s2是s1的子串的情况下做处理
在这个前提下,如果len1==len2,说明两个字符串的确相同;如果len1<len2,那么s1是s2的子串,s1<s2;如果len1>len2,那么s2是s1的子串,s1>s2
其实这里我定了默认条件都是英文字符,如果有其他字符可能会有问题
dashan70345 2010-09-11
  • 打赏
  • 举报
回复
12楼的有问题,之比较了首字母
String[] s = {"Bc","Ad","aa","AC","Hello","Xman","little","Da","During","dfy"};
就会出错
dashan70345 2010-09-11
  • 打赏
  • 举报
回复
15楼
compare(String s1, String s2)中的这段代码不懂,帮忙解释下
if (len1 == len2)
return 0;
else if (len1 > len2)
return arr1[len];
else
return -arr2[len];
谢了。


zhuzeitou 2010-09-10
  • 打赏
  • 举报
回复
public static void sort(String[] src) {
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的是冒泡,这个是无递归快排……
zhuzeitou 2010-09-10
  • 打赏
  • 举报
回复
public static int compare(String s1, String s2) {
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));
}
bf234511171 2010-09-10
  • 打赏
  • 举报
回复
11楼你的答案有问题吧LZ说了不能使用已有的类你写的那个类明显用倒了已有的类了!
ytyjxhy 2010-09-10
  • 打赏
  • 举报
回复
public class Test {
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);
}
}
}
tong467 2010-09-09
  • 打赏
  • 举报
回复
public class Test2 {
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;
}
}
刚刚那个逻辑有问题 这个好像比那个强点!
tong467 2010-09-09
  • 打赏
  • 举报
回复
package com;

public class Test2 {
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;
}
}
你看下 吧 我英语次 变量名和方法名 很难认. 呵呵! 包含下!
tong467 2010-09-09
  • 打赏
  • 举报
回复
Ad和aC的排序原则是什么呢?
Ad 在 aC 之前,先比较首字母
在之后 还比较之后的字母吗?
大写的字母排在小写字母之前对吗?
JAVA_Xiu 2010-09-09
  • 打赏
  • 举报
回复
用ASC2码比较 都转成INT型 比比就行了
lhlove271015 2010-09-09
  • 打赏
  • 举报
回复
请问你这个是作业吗?
尛傻囝 2010-09-09
  • 打赏
  • 举报
回复
SortedMap、SortedSet类好像都有自动排序的功能,你去看看api的介绍。
dashan70345 2010-09-09
  • 打赏
  • 举报
回复
高手,要源码,谢谢,
potahai 2010-09-09
  • 打赏
  • 举报
回复
先排序首字母 如果一样排序第2个以此类推, 用ASCLL码比较吧
huntor 2010-09-09
  • 打赏
  • 举报
回复
自己写一个Comparator<String>
dashan70345 2010-09-09
  • 打赏
  • 举报
回复
Ad和aC的排序原则是什么呢?
Ad 在 aC 之前,先比较首字母
BearKin 2010-09-09
  • 打赏
  • 举报
回复
随便找个排序方法 你只是需要写一个比较方法而已 如果是作业的话 建议你自己写
zhuzeitou 2010-09-09
  • 打赏
  • 举报
回复
Ad和aC的排序原则是什么呢?

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧