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.
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 ();
}
}