该数组如何排序

bitm 2010-05-17 01:15:08
char[] arr=new char[]{'a','a','c','a','b','b'};

想要实现输出结果为:

a,b,c,a,b,a

如何实现?
...全文
312 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
jinghua_zhou 2010-05-17
  • 打赏
  • 举报
回复
觉得好像很麻烦!!
lz的数据可能是动态的,可能需要考虑到'z',那么就需要很多歌集合对象存入,然后再取出!!
hedonist18 2010-05-17
  • 打赏
  • 举报
回复
char[] arr=new char[]{'a','a','c','a','b','b'};
先对arr进行排序
char [][] tmpArr=new char[arr.length][arr.length];
int[] arrIndex=new int[arr.length];
int index=0;
for(int i=0;i<arr.length;i++){//遍历所有的数组
for(int j=0;j<=index;j++){
if(j==index){
++index;
arrIndex[j]=0;
tmpArr[j][arrIndex[j]]=arr[i];
break;
}
if(arr[i]>tmpArr[j][arrIndex[j]]){//这个是按你的规则排序的
++arrIndex[j];
tmpArr[j][arrIndex[j]]=arr[i];
break;
}
}
}
大概思路就是这样啦!
lu76689614 2010-05-17
  • 打赏
  • 举报
回复
不那么麻烦吧

你可以先进行判断 将重复的数组remove移除一个

然后按照正常的排序就OK 了
x_pengcheng 2010-05-17
  • 打赏
  • 举报
回复
java有个比较接口 实现它就可以实现自定义排序功能
cwjieNo1 2010-05-17
  • 打赏
  • 举报
回复
看不到有什么规则·
alankobe 2010-05-17
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 keeya0416 的回复:]
引用 8 楼 wutian4567268 的回复:
把数组从小到大排序(算法自选),然后返回非重复的一组值,如{'a','a','a','b','b','c'}则返回'a','b','c';保留剩下的值,递归调用以上内容,直到数组长度为零

Java里只能有一个返回值,而且 直到数组长度为零 是无法实现的
Java里无法改变参数的值,只能改变参数的属性值
按这种方法的话就得自己定义一个类……
[/Quote]

何必咬文嚼字呢?就看个思路就成。
先排序,再用LinkedList弹出每一组无重复的序列,直到LinkedList为空。这个算法对有大量重复数据的数组性能不如你那个hash高。
但你的那个算法如果是处理String[]而不是char[]的话,还要做很多改进,因为String.hashCode的顺序不能体现String的顺序,必须先对String排序,再用辅助数组存放HashCode才行。

而这个算法写起来会很简洁。
liuhuan851002 2010-05-17
  • 打赏
  • 举报
回复
主要就是找规律
凉岑玉 2010-05-17
  • 打赏
  • 举报
回复
直接输出的时候按顺序输出就行~这个方法最简单~
bitm 2010-05-17
  • 打赏
  • 举报
回复
如果改成二维数组的元素, 是否更直观些。

排列规则就是先按字符串数组里的元素不同依次输出
如:

如果数组里的元素改成字符串,
String[][] arr=new String[][]{{"aa","业务1"},{"aa","业务2"},{"bc","业务3"},{"ad","业务4"},{"aa","业务5"},{"bc","业务6"}};

想要实现输出结果为(不用排序):

输出:
aa ab bc
aa bc
aa
或是输出
aa
aa ab bc
aa bc
等等
bitm 2010-05-17
  • 打赏
  • 举报
回复
排列规则就是先按字符串数组里的元素不同依次输出
如:

如果数组里的元素改成字符串,
String[] arr=new String[]{"aa","aa","bc","ad","aa","bc"};

想要实现输出结果为(不用排序):

输出:
aa ab bc
aa bc
aa
或是输出
aa
aa ab bc
aa bc
等等
keeya0416 2010-05-17
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 bitm 的回复:]
如果数组里的元素改成字符串,
String[] arr=new String[]{"aa","aa","bc","ad","aa","bc"};

想要实现输出结果为:

aa,bc,ad,aa,bc,aa

如何实现?
[/Quote]
。。。。看不懂规则
解决方案和上一个一样就是新建 hash 而后再读出来
效率上可以优化下 我上边给的代码投机了些,懒的死脑细胞了 呵呵
keeya0416 2010-05-17
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 wutian4567268 的回复:]
把数组从小到大排序(算法自选),然后返回非重复的一组值,如{'a','a','a','b','b','c'}则返回'a','b','c';保留剩下的值,递归调用以上内容,直到数组长度为零
[/Quote]
Java里只能有一个返回值,而且 直到数组长度为零 是无法实现的
Java里无法改变参数的值,只能改变参数的属性值
按这种方法的话就得自己定义一个类型,含有两个数组。
一个是返回的数组,一个是改变后的新数组
那样就浪费了大量的内存去建数组
dr_lou 2010-05-17
  • 打赏
  • 举报
回复
排序规则是什么?
bitm 2010-05-17
  • 打赏
  • 举报
回复
如果数组里的元素改成字符串,
String[] arr=new String[]{"aa","aa","bc","ad","aa","bc"};

想要实现输出结果为:

aa,bc,ad,aa,bc,aa

如何实现?
keeya0416 2010-05-17
  • 打赏
  • 举报
回复

public class Test {
public static void main(String[] args) {
char[] arr = new char[] { 'a', 'a', 'c', 'a', 'b', 'b' };
reShortArr(arr);
for(char i : arr){
System.out.print(i + "\t");
}

}

public static void reShortArr(char[] arr){
int[] arrNum = initArr(arr);
int index = 0;
while(arrNum[26] > 0){
for(int i = 0; i < arrNum.length - 1; i++){
if(arrNum[i] > 0){
arr[index++] = (char)(i + 97);
arrNum[i]--;
arrNum[26]--;
}
}
}
}

private static int[] initArr(char[] ch)
{
int[] arrNum = new int[27];
for(int i = 0; i < ch.length; i++){
arrNum[ch[i] - 97]++;
}
arrNum[26] = ch.length;
return arrNum;
}
}

这个代码的效率可以优化下的,楼主自己改下
wutian4567268 2010-05-17
  • 打赏
  • 举报
回复
把数组从小到大排序(算法自选),然后返回非重复的一组值,如{'a','a','a','b','b','c'}则返回'a','b','c';保留剩下的值,递归调用以上内容,直到数组长度为零
bitm 2010-05-17
  • 打赏
  • 举报
回复
我的描述有点问题,可能不是排序,确切的说应该是:按照某种规则进行排列组合。
keeya0416 2010-05-17
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 keeya0416 的回复:]
把插入排序改下就可以实现这个需求
不知楼主还有什么效率要求没
[/Quote]
哦 这个实现起来蛮麻烦的
想到了更好的办法 这就写去
keeya0416 2010-05-17
  • 打赏
  • 举报
回复
把插入排序改下就可以实现这个需求
不知楼主还有什么效率要求没
lodachi 2010-05-17
  • 打赏
  • 举报
回复
没看明白
加载更多回复(4)

62,614

社区成员

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

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