Search code examples
javasortingarraylistbubble-sort

How to check how many passes are needed to sort the elements in an ArrayList?


How to check how many passes are needed to sort the elements in an arraylist by using bubble sort? I have these two methods.

public boolean checkInSortedOrder(ArrayList<QuakeEntry> quakes){
  boolean sorted = true;        
  for (int i = 1; i < quakes.size(); i++) {
            if (quakes.get(i-1).compareTo(quakes.get(i)) > 0){ 
            sorted = false;
        }
}

return sorted;

The above method checks whether the arrayList is sorted or not. And this method performs the bubble sort.

public void onePassBubbleSort(ArrayList<QuakeEntry> quakeData, int numSorted){
    int j;
    QuakeEntry temp;
  for(int i=0; i<numSorted; i++){
   for( j=0; j<(quakeData.size()-i-1);j++){
         if(quakeData.get(j).getMagnitude()>quakeData.get(j+1).getMagnitude()){
          temp=quakeData.get(j);
          quakeData.set(j,quakeData.get(j+1));
          quakeData.set(j+1,temp);
         }
       } 
      System.out.println("Printing Quakes after "+ i +" pass ");
       for (QuakeEntry qe: quakeData) { 
       System.out.println(qe);
    }
   }

}

I know i need to add a counter variable. But bit confused with the code.


Solution

  • One can simply use a boolean value, to check how many minimum passes are required to sort a given list, as shown in the code below:

    import java.util.*;
    
    public class BubbleSort {
    
        private static final int TOTAL_ELEMENTS = 5;
    
        private List < Integer > numbers;
        private boolean isSorted;
        private Random random;
    
        public BubbleSort () {
            random = new Random ();
            isSorted = true;
            numbers = new ArrayList < Integer > ( TOTAL_ELEMENTS );
            numbers.add ( new Integer ( 1 ) );
            numbers.add ( new Integer ( 2 ) );
            numbers.add ( new Integer ( 3 ) );
            numbers.add ( new Integer ( 4 ) );
            numbers.add ( new Integer ( 5 ) );
        }
    
        private void performTask () {
            int pass = 1;
            while ( pass <= numbers.size () ) {
                isSorted = true;
                for ( int i = 0; i <= ( numbers.size () - pass - 1 ); ++i ) {
                    System.out.println ( "i: " + i + " pass: " + pass + "[ i ]: " + numbers.get ( i ) + " [ i + 1 ]: " + numbers.get ( i + 1 )  );
                    if ( numbers.get ( i ).compareTo ( numbers.get ( i + 1 ) ) > 0 )  {
                        System.out.println ( "Entered if clause" );
                        Integer temp = numbers.get ( i );
                        numbers.set ( i, numbers.get ( i + 1 ) );
                        numbers.set ( i + 1,  temp );
                        isSorted = false;
                        display ();
                    }
                }
                if ( isSorted ) {
                    break;
                }
                ++pass;
            }
            System.out.println ( "Minimum passes: " + pass );
            display ();
        }
    
        private void display () {
            System.out.println ( "Array content: " );
            for ( Integer number : numbers ) {
                System.out.println ( number.intValue () );
            }
        }
    
        public static void main ( String [] args ) {
            new BubbleSort ().performTask ();
        }
    }