import java.util.*;
import java.io.*;
class Url{
String url;
int count;
public void setUrl(String url){
this.url=url;
}
public void setCount(int count){
this.count=count;
}
public String getUrl(){
return this.url;
}
public int getCount(){
return this.count;
}
}
public class MaxK{
Map<String,Integer> map;
public MaxK(){
map=new HashMap<String,Integer>();
}
public int partion(int low,int high,Url[]array){
int i=low;
int j=high;
int c;
c=array[j].getCount();
Url tmp=array[j];
while(i!=j){
while((array[i].getCount()<c)&&(i<j)){
i++;
}
if(i<j){
array[j]=array[i];
j--;
}
while((array[j].getCount()>c)&&(i<j)){
j--;
}
if(i<j){
array[i]=array[j];
i++;
}
}
array[i]=tmp;
return i;
}
public void getMaxK(int k,Url[] array){
int low=0,i=0;
int len=array.length;
int high=len-1;
while(true){
i=partion(low,high,array);
if(i==(k-1)){
System.out.println(i+"=="+(k-1));
break;
}
if(i<(k-1)){
low=i+1;
}else{
high=i-1;
}
}
System.out.println("\nthe sorted array:\n");
for(i=0;i<k;i++){
System.out.println(array[i].getUrl());
}
}
public Url[] setUrlArray(String path){
try{
BufferedReader br=new BufferedReader(new FileReader(path));
String str;
Integer i;
while((str=br.readLine())!=null){
if(map.containsKey(str)){
int count=map.get(str).intValue();
i=new Integer(count+1);
}else{
i=new Integer(1);
}
map.put(str,i);
}
}catch(Exception ex){
}
int n=map.size();
int i=0;
Url[] array =new Url[n];
Iterator it=map.entrySet().iterator();
while(it.hasNext()){
Map.Entry me=(Map.Entry)it.next();
array[i]=new Url();
array[i].setUrl((String)me.getKey());
array[i].setCount(((Integer)me.getValue()).intValue());
System.out.println("array["+i+"].url="+(String)me.getKey()+","+"array["+i+"].count="+((Integer)me.getValue()).intValue());
i++;
}
return array;
}
public static void main(String[] args){
MaxK mk=new MaxK();
Url array[]=mk.setUrlArray("urls.txt");
mk.getMaxK(3,array);
int len=array.length;
int i=0;
while(i<len){
System.out.println("array["+i+"].url="+array[i].getUrl()+","+"array["+i+"].count="+array[i].getCount());
i++;
}
}
}
用shell实现:
cat url.txt|sort|uniq -c|sort
shell总是那么强大,(⊙o⊙)…