问题:编写一个程序,用选择法对数组a[]={20,10,50,40,30,70,60,80,90,100}进行从大到小的排序。
程序:
package test;
public class ArraySort {
public static void main(String[] args){ int array[]={20,10,50,40,30,70,60,80,90,100}; int i,j,k,t;
 for(i=0;i<array.length-1;i++){
 k=i;
 for(j=i+1;j<1;j++)
     if(array[j]<array[k])k=j;
 t=array[k];array[k]=array[i]=t;
 }
 for(i=0;i<l;i++)
     System.out.println("array["+i+"]="+array[i]);
}
}输出的结果不尽人意,请教那出问题了。

解决方案 »

  1.   

    for(i=0;i <l;i++)  你这句中,l是从哪里来的呢??整个里面都没做这个变量的定义
    public class ArraySort {
    public static void main(String[] args) {
    int array[] = { 20, 10, 50, 40, 30, 70, 60, 80, 90, 100 }; int i, j, k, t;
    int l = array.length; for (i = 0; i < array.length - 1; i++) {
    k = i;
    for (j = i + 1; j < l; j++)
    if (array[j] < array[k])
    k = j;
    t = array[k];
    array[k] = array[i] ;
     array[i]  = t;
    }
    for (i = 0; i < l; i++)
    System.out.println("array[" + i + "]=" + array[i]);
    }
    }
      

  2.   

    下面的答案可以打印出正确结果:
    package test; public class ArraySort { 
    //从大到小排序  选择法 每次取出一个最大的出来
    public static void main(String[] args){  int array[]={20,10,50,40,30,70,60,80,90,100}; 

    int i,j,k,t; 


    for(i=0;i <array.length-1;i++){ 
    k=i; 
    for(j=i+1;j <array.length;j++) 
        if(array[j] >array[k])
         k=j; 
    t=array[k];array[k]=array[i];array[i]=t



    for(i=0;i <array.length;i++) 
        System.out.println("array["+i+"]="+array[i]); 


    红色为楼主出错的地方
      

  3.   

    package test; public class ArraySort { 
    //从大到小排序  选择法 每次取出一个最大的出来 
    public static void main(String[] args){ int array[]={20,10,50,40,30,70,60,80,90,100}; int i,j,k,t; //冒泡
    for(i=0;i <array.length-1;i++){ 
        for(j=i+1 ;j <array.length;j++) 
        if(array[j] >array[i]) 
        t=array[i];
        array[i]=array[j];
        array[j]=t; 
    } for(i=0;i <array.length;i++) 
        System.out.println("array["+i+"]="+array[i]); 

      

  4.   

    不好意思 直接用c++改的
    所以上面的贴错了!
    修改如下:
    package test; public class ArraySort { public static void main(String[] args){  int array[]={20,10,50,40,30,70,60,80,90,100}; // i j 作为下标 t 作为临时交换数
    int i,j,t; // 冒泡从大到小排序选择法每次冒出一个最大的数据
    // 时间复杂度  为O(n*log2(n))
    //
    for(i=0;i <array.length-1;i++){ 
        for(j=i+1 ;j <array.length;j++) 
        if(array[j] >array[i]) {
        t=array[i];
        array[i]=array[j];
        array[j]=t; 
      }

    // 输出结果:
    for(i=0;i <array.length;i++){ 
        System.out.println("array["+i+"]="+array[i]); 

    } }见谅!