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

数组排序算法,看不懂了,求大家解答.
//deleteArr()方法看不懂了...请大家解答;


class   Test
{
public   static   void   main(String   args[])
{
int   arr[]   =   {23,78,12,33,22,55};
int   newarr[]   =   new   int[arr.length];


for(int   i=0;i <newarr.length;i++)
{
int   pos   =   getMax(arr);

newarr[i]   =   arr[pos];
arr   =   deleteArr(arr,pos);
}

for(int   i=0;i <newarr.length;i++)
{
System.out.println(newarr[i]);
}  
}


static   int   getMax(int   arr[])
{
int   pos   =   0;
int   temp   =   0;
for(int   i=0;i <arr.length;i++)
{
if(arr[i]> temp)
{
temp   =   arr[i];
pos   =   i;
}
}
return   pos;
}

static   int[]   deleteArr(int   arr[],int   pos)
{
int   newarr[]   =   new   int[arr.length-1];
int   newpos   =   0;
for(int   i=0;i <arr.length;i++)
{
if(arr[i]!=arr[pos])
{
newarr[newpos]   =   arr[i];
newpos++;
}
}

return   newarr;
}
}

------解决方案--------------------
main方法中进入循环
1,调用getMax方法获取原始数组中最大的数字,
2,把这个数字放到新的数组中
3,调用deleteArr方法删除原始数组中刚才找到的最大的哪个数字
一直执行1,2,3步,直到执行到数组的长度那么长的地方停止(这个时候没有数字了,也就是排完了)

------解决方案--------------------
to:楼上
pos是arr数组中最大元素所在的位置;
因此if(arr[i]!=arr[pos])就是判断,arr数组中位置为i的元素,是否是最大的那个元素。
如果不是就把这个元素加到新的数组newarr中,如果是就不用加进去了。
因为这个最大的元素已经提取出来,放在已排序好的数组里了。而这里的newarr需要最为目标数组再重复进行排序。