算法:
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];
}
}


}

解决方案 »

  1.   

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

  2.   

    if (i ==0||ary[i].time<ary[i-1].time)
    return ;
    这句话也要改if (i ==0||ary[i + 1].time<ary[i].time)
    return ;
    而且,我觉得你这样不好,两个方法放在一起,不好,一概将time++这个功能单独拿出来,等time++之后,再进行排序,写在一起不好