排序问题求各位大佬帮忙

zhou343384116 2017-12-25 04:45:24
数组中数字出现次数为主以从小到大为辅进行排序
排序大小是按照0-9排列

比如数组中有1,2,2,3,8,0,1
1,2出现两次 ,0,3,8出现一次则为12038
剩余未出现的数在之后进行从小到大排列
实则排列后为1203845679
...全文
229 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhou343384116 2017-12-28
  • 打赏
  • 举报
回复
引用 5 楼 qq_27762917 的回复:

public class Test {
	/*
	 * 输入:1,2,2,3,8,0,1,0,0,0,9,9,9,9,9,9,9 
	 * 输出:9,0,1,2,3,8,4,5,6,7
	 */
	public static void main(String[] args) {
		Integer[] array = new Integer[] { 1, 2, 2, 3, 8, 0, 1, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9 };
		for (Integer entity : array)
			System.out.print(entity + "\t");
		System.out.println();
		for (Integer number : completeDigital(sortByTimes(array)))
			System.out.print(number + "\t");
	}

	private static List<Map.Entry<Integer, Integer>> sortByTimes(Integer[] array) {
		Map<Integer, Integer> map = new TreeMap<Integer, Integer>();
		for (Integer number : array) {
			Integer times = map.get(number);
			times = times == null ? 1 : ++times;
			map.put(number, times);
		}
		List<Map.Entry<Integer, Integer>> list = new ArrayList<Map.Entry<Integer, Integer>>(map.entrySet());
		Collections.sort(list, new Comparator<Map.Entry<Integer, Integer>>() {
			@Override
			public int compare(Entry<Integer, Integer> o1, Entry<Integer, Integer> o2) {
				return o2.getValue() - o1.getValue();
			}
		});
		return list;
	}

	private static List<Integer> completeDigital(List<Map.Entry<Integer, Integer>> list) {
		List<Integer> retult = new ArrayList<Integer>();
		List<Integer> temp = Arrays.asList(new Integer[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 });
		for (Map.Entry<Integer, Integer> entry : list)
			retult.add(entry.getKey());
		for (Integer number : temp) {
			if (!retult.contains(number))
				retult.add(number);
		}
		return retult;
	}
}
谢大佬费心,学习了
Freefish1994 2017-12-26
  • 打赏
  • 举报
回复

public class Test {
	/*
	 * 输入:1,2,2,3,8,0,1,0,0,0,9,9,9,9,9,9,9 
	 * 输出:9,0,1,2,3,8,4,5,6,7
	 */
	public static void main(String[] args) {
		Integer[] array = new Integer[] { 1, 2, 2, 3, 8, 0, 1, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9 };
		for (Integer entity : array)
			System.out.print(entity + "\t");
		System.out.println();
		for (Integer number : completeDigital(sortByTimes(array)))
			System.out.print(number + "\t");
	}

	private static List<Map.Entry<Integer, Integer>> sortByTimes(Integer[] array) {
		Map<Integer, Integer> map = new TreeMap<Integer, Integer>();
		for (Integer number : array) {
			Integer times = map.get(number);
			times = times == null ? 1 : ++times;
			map.put(number, times);
		}
		List<Map.Entry<Integer, Integer>> list = new ArrayList<Map.Entry<Integer, Integer>>(map.entrySet());
		Collections.sort(list, new Comparator<Map.Entry<Integer, Integer>>() {
			@Override
			public int compare(Entry<Integer, Integer> o1, Entry<Integer, Integer> o2) {
				return o2.getValue() - o1.getValue();
			}
		});
		return list;
	}

	private static List<Integer> completeDigital(List<Map.Entry<Integer, Integer>> list) {
		List<Integer> retult = new ArrayList<Integer>();
		List<Integer> temp = Arrays.asList(new Integer[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 });
		for (Map.Entry<Integer, Integer> entry : list)
			retult.add(entry.getKey());
		for (Integer number : temp) {
			if (!retult.contains(number))
				retult.add(number);
		}
		return retult;
	}
}
zhou343384116 2017-12-26
  • 打赏
  • 举报
回复
引用 3 楼 galiniur0u 的回复:
不会是作业题吧
public class Test{
  public static void main(String[] args){
    int[] a = new int[]{1, 2, 2, 3, 8, 0, 1};
    sort(a);
  }

  public static void sort(int[] a){
    int[] tmp = new int[]{0,0,0,0,0,0,0,0,0,0};
    for(int i = 0; i < a.length; i ++){
      tmp[a[i]] ++;
    }
    int max = 0;
    int maxp = 0;

    for(int i = 0; i < tmp.length; i ++){
      maxp = 0;
      max = tmp[0];
      //每次选出最大的数,打印其下标即可
      for(int j = 1; j < tmp.length; j ++) {
        if (max < tmp[j]) {
          max = tmp[j];
          maxp = j;
        }
      }
      System.out.print(maxp + " ");
      tmp[maxp] = -1;
    }
  }
}
谢大佬,确实挺迷茫的,自己写着写着就乱了。
galiniur0u 2017-12-25
  • 打赏
  • 举报
回复
不会是作业题吧
public class Test{
  public static void main(String[] args){
    int[] a = new int[]{1, 2, 2, 3, 8, 0, 1};
    sort(a);
  }

  public static void sort(int[] a){
    int[] tmp = new int[]{0,0,0,0,0,0,0,0,0,0};
    for(int i = 0; i < a.length; i ++){
      tmp[a[i]] ++;
    }
    int max = 0;
    int maxp = 0;

    for(int i = 0; i < tmp.length; i ++){
      maxp = 0;
      max = tmp[0];
      //每次选出最大的数,打印其下标即可
      for(int j = 1; j < tmp.length; j ++) {
        if (max < tmp[j]) {
          max = tmp[j];
          maxp = j;
        }
      }
      System.out.print(maxp + " ");
      tmp[maxp] = -1;
    }
  }
}
zhou343384116 2017-12-25
  • 打赏
  • 举报
回复
引用 1 楼 lye2000000_super 的回复:
你这规则不是很清楚吗?一步步去做.没有现成的这样的规则,先计算每个数字出现的次数,然后相同的排序,一步步的实现吧.
新手光知道要求但不是太会写所以才来问的
  • 打赏
  • 举报
回复
你这规则不是很清楚吗?一步步去做.没有现成的这样的规则,先计算每个数字出现的次数,然后相同的排序,一步步的实现吧.

62,628

社区成员

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

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