java 大小相间排序_Java一串由数字组成的字符串,求各个数字出现的次数,并按出现次数的大小从小到大排序,若出现的次数相同...

更多追问追答

追问

谢谢大哥,不过如果出现的次数相同,要把后出现的数字排在后面,这点没做到啊

追答

哦,没注意这要求。

8ae04c91a0a8da487570853a2a054040.png

ae3ad2b65e3c403c28291ea8b8c2f6b3.png

public class A {

public static void bubbleSort(int[] n, int[] idx) {

int t, j;

for (int i=0;i

for (j=0;j

if (n[j]>n[j+1]) {

t = n[j];n[j] = n[j+1];n[j+1] = t;

t = idx[j]; idx[j] = idx[j+1]; idx[j+1] = t;

}

}

}

}

public static void main(String argv[]) {

String s = "10771034948754277771578";

int n[] = {0,0,0,0,0,0,0,0,0,0};

int idx[] = {0,0,0,0,0,0,0,0,0,0};

int k= 0;

boolean f;

for (int i=0;i

f = false;

int ch = s.charAt(i)-'0';

for (int j=0;j

if (idx[j] == ch) {

n[j]++;

f = true;

}

}

if (!f) {

idx[k] = ch;

n[k++] = 1;

}

}

bubbleSort(n, idx);

for (int i=0;i

System.out.printf("%d: %d次\n",idx[i], n[i]);

}

}

}

按你的要求,你给出的结果也是错的,8出现在5前面.

d36f0c618fbf4c0e5b989051645236c7.png

bef2c7ec5906b56143d682a8500135cb.png

追问

那是我没说清楚,我的错,我的意思是如果出现的次数相同,那就比较最后出现的位置,例如我给出的那个字符串,8和5都是出现2次,但8最后出现的位置比5最后出现的位置靠后,那么8就排在5的后面

追答

这样上面这程序就不能用了。

先定义一个Bean:

public class B implements Comparable {

private char ch;

private int size;

private int disp;

public int getDisp() {

return disp;

}

public void setDisp(int disp) {

this.disp = disp;

}

public char getCh() {

return ch;

}

public void setCh(char ch) {

this.ch = ch;

}

public int getSize() {

return size;

}

public void setSize(int size) {

this.size = size;

}

@Override

public int compareTo(B o) {

if (this.size==o.getSize())

return this.disp-o.getDisp();

return this.size-o.getSize();

}

}

-------------------------------------

再写主程序:

import java.util.ArrayList;

import java.util.Collections;

import java.util.List;

public class A {

public static B findItem(List l, char ch) {

for (B b : l) {

if (b.getCh() == ch) {

return b;

}

}

return null;

}

public static void main(String argv[]) {

List l = new ArrayList();

String s = "10771034948754277771578";

for (int i=0;i

B b = findItem(l, s.charAt(i));

if (b == null) {

b = new B();

b.setCh(s.charAt(i));

b.setSize(1);

b.setDisp(i);

l.add(b);

} else {

b.setSize(b.getSize()+1);

b.setDisp(i);

}

}

//补齐缺少的'0'-'9',如果不需要 6: 0次,这样的数据,字符串里没有,就删除这一段

for (int i=0;i<10;i++) {

B b = findItem(l, (char) ('0' + i));

if (b == null) {

b = new B();

b.setCh((char)('0' + i));

b.setSize(0);

b.setDisp(0);

l.add(b);

}

}

Collections.sort(l);

for (B b: l)

System.out.printf("%c: %d次\n",b.getCh(), b.getSize());

}

}

-----------------------

6: 0次

3: 1次

9: 1次

2: 1次

0: 2次

5: 2次

8: 2次

4: 3次

1: 3次

7: 8次

追问

可以了,谢谢老哥

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值