日期:2014-05-20  浏览次数:20768 次

算法题:根据数组访问的次数排序,请教中??
算法:
1,初始化数组:0,2,6,76,5,12
2.   若访问数组中的元素,则次数自动加1,根据元素的访问次序按排序
若访问元素5一次,则排列效果如图:
排序前:
0,2,6,76,5,12
排序后
5,0,2,6,76,12

代码如下:
public   class   Test{
public   static   void   main(String   []   args){
//定义数组,并完成初始化
Ary   [] a=new   Ary[6];
int   i=0;
a[i++]   =   new   Ary(0);
a[i++]   =   new   Ary(2);
a[i++]   =   new   Ary(6);
a[i++]   =   new   Ary(76);
a[i++]   =   new   Ary(5);
a[i++]   =   new   Ary(12);
//测试代码,这是一个好习惯
Ary.search(a,5);
//打印数组
for   (int   p   =   0;   p <a.length;   p++)
System.out.println   (a[p].data+ ": "+a[p].time);

}
}
class   Ary{
int   data;
int   time;
public   Ary(int   value){
this.data=value;
time=0;
}
public   static   void   search(Ary   []   ary,int   value)
{
int   j=0;
for   (int   i   =   1;   i <ary.length;   i++)
{
if   (value==ary[i].data)
ary[i].time+=1;
if   (i   ==0||ary[i].time <ary[i-1].time)
return   ;
else
{
ary[0]=ary[i];
for   (j   =   i-1;   j> =1&&ary[j].time <ary[i].time;   j--)
{
ary[j+1]=ary[j]; ;
}
ary[j]=ary[0];
}
}

}  
}

------解决方案--------------------
先不说你的排序算法对不对,你看你的FOR 循环,for (int i = 1; i <ary.length; i++)
这就错了,i从0开始。