您的位置:首页 > 其它

输入一个数组,对数组进行排序,并输出该数组中重复元素出现的次数

2013-10-22 15:37 831 查看
*对一个数组排序,并输出数组中重复元素的个数

* 如: 78,67,98,21,6,9,78,78,78,21

* 输出:6[1],9[1],21[2],67[1],78[4],98[1]

public void sortAndCount(int array[],int length){

//这里有三个问题:排序、统计元素个数、去重。统计元素个数应在去重之前,去重后再排序

//1、统计元素出现次数。用一个Map来记录某个元素的出现次数

Map<Integer, Integer> map = new HashMap<Integer, Integer>();

//存储Map<array[i],count> map中键是不允许重复的

int count;

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

count= 0;

for(int j=0;j<length;j++){

if(array[i]==array[j]){

count++;

}

}

map.put(array[i], count);

}

//2、去除数组中的重复元素个数。新开一个数组,原数组元素在新开数组中没有则加入

int b[] = new int[length];

int index=0;

List<Integer> list = new ArrayList<Integer>();

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

if(!list.contains(array[i])){

list.add(array[i]);

b[index]=array[i];

index++;

}

}

//3、将数组b[]排序

quickSort(b, 0, index);

//4、输出

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

if(b[i]!=0)

System.out.print(b[i]+"["+map.get(b[i])+"]"+",");

}

}

//快速排序的方法

public void quickSort(int array[],int l,int r){

int i=l,j=r;

int temp;

if(l<r){

temp = array[l];

while(i!=j){

while(i<j&&array[j]>temp){

j--;

}

if(i<j){

array[i]=array[j];

i++;

}

while(i<j&&array[i]<temp){

i++;

}

if(i<j){

array[j]=array[i];

j--;

}

}

array[i]=temp;

quickSort(array,l,i-1);

quickSort(array,i+1,r);

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: