简体   繁体   中英

Why does my bubble sort method not work?

Sorry I am still learning programming. Java just stops and seems to be processing something. It says "Building java application Javaapplication2" then just sits there doing nothing. What have a I done to cause this ?

package javaapplication2;

public class JavaApplication2 {

    public static void main(String[] args) {
       int a [] = {1,2,3};
       int c [] =  Sortarray.sortlowhigh(a);

       int i = 0;
      while (i<c.length){

          System.out.println("array is" + c[i]);
        i++;
      }
    }

}

package javaapplication2;
public class Sortarray {
public static int[] sortlowhigh(int a[])
    {
        int i = 0;
       int j = 0;
      while(j<a.length){

        while(i<a.length){
            if (a[i]>a[i+1]){
          /* store low  value in temp*/
             int temp = a[i+1];
          /* assign low value  to be the higher value*/
             a[i+1] = a[i];
          /* assign the old higher value to be the lower value stored in temp*/
             a[i]=temp;

            }
            j++;
        }

    } 
       return a;
}
}

My code is above. A while ago I wrote a sort and remove duplicates method now I want to put them into a class but I am doing something wrong. Please help. Thanks.

在sortlowhigh while循环中,您有i,i <a.lenght是第二个循环的条件,它将一直持续到i> = a.length,但我从未更改,它始终保持为0。

/*change your code as given*/
public static int[] sortlowhigh(int a[]){     
int i = 0;
 int j = 0; int temp=0;
 while(j<(a.length-1))
   {
           i=0;
           while(i<a.length-j-1)
           {
               if(a[i]>a[i+1])/* For descending order use < */
               {

                   temp = a[i];
                   a[i]=a[i+1];
                   a[i+1] = temp;
               }
               i++;
           }
           j++;
   }
 return a;
}

I try your code and I can see that you have a infinite loop in the class Sortarray. The variable i is never increased. Try this code:

    public static int[] sortlowhigh(int a[])
    {
        int i = 0;
        int j = 0;
        int temp;
        while(j< (a.length -1) ){
           i = 0;
            while(i< (a.length - j - 1)){
                if (a[i] > a[i+1]){
      /* store low  value in temp*/
                    temp = a[i];
      /* assign low value  to be the higher value*/
                    a[i] = a[i+1];
      /* assign the old higher value to be the lower value stored in temp*/
                    a[i+1]=temp;
                }
               i++;
            }
            j++;
        }
        return a;
    }

you should reset the value of i, when the value of j is incremented. The array is of size 3. but the value of i is already 3. so it gets garbage value in a[i+1]. Hope this helps. I haven't tried the code.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM