java数组排序各位老大帮帮忙谢谢

jl08033 2009-10-29 10:22:07
int [] i={1,3,1,0,5,0,1,2,2};
一个数组 把重复在多放前面 个数相同的按从小到大排序

排序后的结果 1,0,2,3,5
那位老大帮忙解决下啊谢谢
...全文
118 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
jl08033 2009-10-30
  • 打赏
  • 举报
回复
你肯定比我大 我才20岁
haojia0716 2009-10-30
  • 打赏
  • 举报
回复
不用谢 我也不是大哥 呵呵
jl08033 2009-10-30
  • 打赏
  • 举报
回复
可以了 谢谢大哥
haojia0716 2009-10-30
  • 打赏
  • 举报
回复
这样可以了吧

就是值相同的时候按键排序


package com.haojia.sample;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

/**
* 对map的值排序
*
* @author July
*
*/
public class SortByMapsValues {

public static void sort(int[] data) {
// 用map记录次数
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
for (int i = 0; i < data.length; i++) {
if (map.get(data[i]) == null) {
map.put(data[i], 1);
} else {
map.put(data[i], map.get(data[i]) + 1);
}
}
System.out.println(map);

// 把map里的entry加到list里(为了用Collections.sort方法排序)
List<Entry<Integer, Integer>> list = new ArrayList<Entry<Integer, Integer>>();
for (Entry<Integer, Integer> entry : map.entrySet()) {
list.add(entry);
}
System.out.println(list);

// 对值排序
Collections.sort(list, new Comparator<Entry<Integer, Integer>>() {
@Override
public int compare(Entry<Integer, Integer> e1,
Entry<Integer, Integer> e2) {
return e1.getValue() < e2.getValue() ? 1 : e1.getValue() > e2
.getValue() ? -1 : (e1.getKey() < e2.getKey() ? -1 : e1
.getKey() > e2.getKey() ? 1 : 0);
}
});
System.out.println(list);

// 打印结果
for (Entry<Integer, Integer> entry : list) {
System.out.print(entry.getKey() + " ");
}
}

public static void main(String[] args) {
int[] i = { 1, 3, 1, 0, 5, 0, 1, 2, 2 };
sort(i);
}
}

rookie001 2009-10-30
  • 打赏
  • 举报
回复
虽然没分啦,但既然写啦,发一下给同龄人吧,我是纯数组流:
int [] i={1,3,1,0,5,0,1,2,2,5,3,3,3,6};
int [] count = new int[i.length];
int [] tmp = new int[i.length];
/**
* 统计重复个数,tmp[i]对应个数count[i]
*/
Arrays.sort(i,0,i.length);
tmp[0] = i[0];
int index = 0;
for(int k=0;k<i.length;k++) {
if(i[k] != tmp[index]){
index++;
tmp[index] = i[k];
}
count[index]++;
}

/**
* 计算出count[j],在count中排第几,存在position[j]中
* 因为count[j],对应tmp[j],便知道了tmp[j]应排位置即position[j]
* 于是一个循环,finalData[position[j]] = tmp[j] 便得到解
*/
int []position = new int[index+1];
for(int j=0;j<index+1;j++){
for(int k=j+1;k<index+1;k++){
if(count[k]>count[j]){
position[j]++;
}else{
position[k]++;
}
}
}
int []finalData = new int[index+1];
for(int k=0;k<index+1;k++) {
finalData[position[k]] = tmp[k];
}
//show
for(int k=0;k<finalData.length;k++) {
System.out.print(finalData[k]+" ");
}
jl08033 2009-10-30
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 rookie001 的回复:]
虽然没分啦,但既然写啦,发一下给同龄人吧,我是纯数组流:
                int [] i={1,3,1,0,5,0,1,2,2,5,3,3,3,6};
int [] count = new int[i.length];
int [] tmp = new int[i.length];
/**
* 统计重复个数,tmp[i]对应个数count[i]
*/
Arrays.sort(i,0,i.length);
tmp[0] = i[0];
int index = 0;
for(int k=0;k <i.length;k++) {
if(i[k] != tmp[index]){
index++;
tmp[index] = i[k];
}
count[index]++;
}

/**
* 计算出count[j],在count中排第几,存在position[j]中
* 因为count[j],对应tmp[j],便知道了tmp[j]应排位置即position[j]
* 于是一个循环,finalData[position[j]] = tmp[j] 便得到解
*/
int []position = new int[index+1];
for(int j=0;j <index+1;j++){
for(int k=j+1;k <index+1;k++){
if(count[k]>count[j]){
position[j]++;
}else{
position[k]++;
}
}
}
int []finalData = new int[index+1];
for(int k=0;k <index+1;k++) {
finalData[position[k]] = tmp[k];
}
//show
for(int k=0;k <finalData.length;k++) {
System.out.print(finalData[k]+" ");
}
[/Quote]
谢谢
jl08033 2009-10-29
  • 打赏
  • 举报
回复
恩等你 谢谢
haojia0716 2009-10-29
  • 打赏
  • 举报
回复
哦哦 忘记了 等等
jl08033 2009-10-29
  • 打赏
  • 举报
回复
这是我System 的结果
相同个数的还是没排序
1,3,1,0,5,0,1,2,2,
1 0 2 5 3
jl08033 2009-10-29
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 haojia0716 的回复:]
刚写完

Java codepackage com.haojia.test;import java.util.ArrayList;import java.util.Collections;import java.util.Comparator;import java.util.HashMap;import java.util.List;import java.util.Map;import java.util.Map.Entry;publicclass T {publicstaticvoid sort(int[] data) {// 用map记录次数 Map<Integer, Integer> map=new HashMap<Integer, Integer>();for (int i=0; i< data.length; i++) {if (map.get(data[i])==null) {
map.put(data[i],1);
}else {
map.put(data[i], map.get(data[i])+1);
}
}
System.out.println(map);// 把map里的entry加到list里(为了用Collections.sort方法排序) List<Entry<Integer, Integer>> list=new ArrayList<Entry<Integer, Integer>>();for (Entry<Integer, Integer> entry : map.entrySet()) {
list.add(entry);
}
System.out.println(list);// 对值排序 Collections.sort(list,new Comparator<Entry<Integer, Integer>>() {
@Overridepublicint compare(Entry<Integer, Integer> e1,
Entry<Integer, Integer> e2) {return e1.getValue()< e2.getValue()?-1 : e1.getValue()> e2
.getValue()?1 :0;
}
});
System.out.println(list);// 打印结果for (int i= list.size()-1; i>=0; i--) {
System.out.print(list.get(i).getKey()+"");
}
}publicstaticvoid main(String[] args) {int[] i= {1,3,1,0,5,0,1,2,2 };
sort(i);
}
}
[/Quote]

老大你相同个数还没按从小到大排序的。。。。。
jl08033 2009-10-29
  • 打赏
  • 举报
回复
谢谢等等送分大家都有
haojia0716 2009-10-29
  • 打赏
  • 举报
回复
打印结果是1 2 0 5 3
因为2和0次数一样 5和3次数一样
老张-AI 2009-10-29
  • 打赏
  • 举报
回复
mark
haojia0716 2009-10-29
  • 打赏
  • 举报
回复
刚写完


package com.haojia.test;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

public class T {

public static void sort(int[] data) {
// 用map记录次数
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
for (int i = 0; i < data.length; i++) {
if (map.get(data[i]) == null) {
map.put(data[i], 1);
} else {
map.put(data[i], map.get(data[i]) + 1);
}
}
System.out.println(map);

// 把map里的entry加到list里(为了用Collections.sort方法排序)
List<Entry<Integer, Integer>> list = new ArrayList<Entry<Integer, Integer>>();
for (Entry<Integer, Integer> entry : map.entrySet()) {
list.add(entry);
}
System.out.println(list);

// 对值排序
Collections.sort(list, new Comparator<Entry<Integer, Integer>>() {
@Override
public int compare(Entry<Integer, Integer> e1,
Entry<Integer, Integer> e2) {
return e1.getValue() < e2.getValue() ? -1 : e1.getValue() > e2
.getValue() ? 1 : 0;
}
});
System.out.println(list);

// 打印结果
for (int i = list.size() - 1; i >= 0; i--) {
System.out.print(list.get(i).getKey() + " ");
}
}

public static void main(String[] args) {
int[] i = { 1, 3, 1, 0, 5, 0, 1, 2, 2 };
sort(i);
}
}

jl08033 2009-10-29
  • 打赏
  • 举报
回复
谢谢
rookie001 2009-10-29
  • 打赏
  • 举报
回复
11点断网,明天给你
jl08033 2009-10-29
  • 打赏
  • 举报
回复
麻烦各位老大把代码发上来吧 要具体的 谢谢
本人一直在等
haojia0716 2009-10-29
  • 打赏
  • 举报
回复
还是用HashMap记录次数吧

67,538

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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