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

那位哥哥姐姐能帮我看看这个插入排序哪写错了!
public   class   InsertionSort
{
public   static   int[]   sort(int[]   a,int   changdu)
{
int[]   temp=new   int[changdu];
int   i;
for(i=1;i <temp.length;i++)
{
temp[i-1]=move(a,i);

}
return   temp;
}

private   static   int   move(int[]a,int   i)
{

int   min=a[0];
                int   smallindex=0;
int   index;
for(index=i;index <a.length;index++)
{
          if(a[index] <min)
        {
    min=a[index];
            smallindex=index;
        }
}
for(int   j=smallindex;j> 0;j--)
  {
  a[j]=a[j-1];
 
  }
  a[i-1]=min;
          min=a[i];
  System.out.println(a[0]);

return   a[i-1];
}
}

输入:   1,6,4,8,3,4,7,0,9,2
显示的结果却是:0   0   0   0   0   0   0   0   0   0

------解决方案--------------------
修改后的代码如下
public static int[] sort(int[] a, int changdu) {
int[] temp = new int[changdu];
int i;
for (i = 1; i <= temp.length; i++) {
temp[i - 1] = move(a, i);
}
return temp;
}

private static int move(int[] a, int i) {

int min = a[i-1];
int smallindex = 0;
int index;
for (index = i; index < a.length; index++) {
if (a[index] < min) {
min = a[index];
smallindex = index;
}
}
for (int j = smallindex; j > 0; j--) {
a[j] = a[j - 1];

}
a[i - 1] = min;
return a[i - 1];
}
主要问题是min的初值不正确,不应该每次给a[0],对于每次遍历其前i-1都是排好序的,只要比较其后的就可以了。还要不知道你changdu这个参数是干什么用的。。。