Bubble Sorting A String Array in Ascending And Descending Order

In my previous article, I provided an example of how you can do integer array sorting using bubble sort. In this article, I have provided a solution on how to do String array sort.

This program:

  • Sorts a string array in ascending order
  • Sorts a string array in descending order
  • Uses String’s in-built compareTo method to compare to entities.

package com.icodejava.blog.datastructure;

/**
 * @author Kushal Paudyal
 * www.icodejava.com
 * Created On -  Feb 18, 2014
 * Last Modified On - Feb 18, 2014
 */
public class BubbleSortString {
	
	public static void main(String args []) {
		String [] unsortedArray = {"M","F","B","E","Z","F","D","Q","R","S","H","A"};
		printArray("Unsorted Array:", unsortedArray);
		
		String [] sortedArray = bubbleSortAscending(unsortedArray);
		
		printArray("Sorted Array (Ascending):", sortedArray);
		
		sortedArray = bubbleSortDescending(unsortedArray);
		
		printArray("Sorted Array (Descending):", sortedArray);
		
		
	}

	
	private static String[] bubbleSortDescending(String[] unsortedArray) {

		for (int index = unsortedArray.length - 1; index > 0; index--) {
			for (int bubbleIndex = 0; bubbleIndex < index; bubbleIndex++) {
				/**
				 * using String's compareTo method to see if one element is
				 * bigger than the other.
				 */
				if (unsortedArray[index].compareTo(unsortedArray[bubbleIndex]) > 0) {
					swap(unsortedArray, index, bubbleIndex);
				}

			}
		}

		return unsortedArray; // which is now sorted
	}

	private static String[] bubbleSortAscending(String[] unsortedArray) {

		for (int index = unsortedArray.length - 1; index > 0; index--) {
			for (int bubbleIndex = 0; bubbleIndex < index; bubbleIndex++) {
				/**
				 * using String's compareTo method to see if one element is
				 * bigger than the other.
				 */
				if (unsortedArray[index].compareTo(unsortedArray[bubbleIndex]) < 0) {
					swap(unsortedArray, index, bubbleIndex);
				}

			}
		}

		return unsortedArray; // which is now sorted
	}

	private static void swap(String[] unsortedArray, int firstIndex, int secondIndex) {
		if(unsortedArray == null 
				|| firstIndex < 0 
				|| firstIndex > unsortedArray.length 
				|| secondIndex < 0  
				|| secondIndex > unsortedArray.length) {
			return;
		}
		String tempString = unsortedArray[firstIndex];
		unsortedArray[firstIndex] = unsortedArray[secondIndex];
		unsortedArray[secondIndex] = tempString;

	}
	
	private static void printArray(String string, String[] unsortedArray) {

		if (unsortedArray != null && unsortedArray.length > 0) {
			System.out.print(string + " ");
			for (int i = 0; i < unsortedArray.length; i++) {
				System.out.print((i > 0 ? "," : "") + unsortedArray[i]);
			}
		}

		System.out.println();

	}
}

The out of running above program:

Unsorted Array: M,F,B,E,Z,F,D,Q,R,S,H,A
Sorted Array (Ascending): A,B,D,E,F,F,H,M,Q,R,S,Z
Sorted Array (Descending): Z,S,R,Q,M,H,F,F,E,D,B,A

Bubble Sorting An Integer Array In Ascending and Descending Order

Bubble Sort Working

Bubble Sort Definition:
Bubble sort is a simple sorting algorithm that works by repeatedly stepping through the list to be sorted, comparing each pair of adjacent items and swapping them if they are in the wrong order. The pass through the list is repeated until no swaps are needed, which indicates that the list is sorted.

Complexity:
Worst Case: O(n^2) – reverse ordered list
Best Case: O(n) – fully sorted list

Note:

  • Bubble Sort is not a good solution if you have a large number of items to be sorted. This is due to the time Complexity.
  • Bubble Sort can however be used to quickly find if a list is already sorted.

Below is my java implementation of Bubble Sort algorithm. I have provided methods to do sorting in both ascending and descending order. This program sorts an integer array, although it can also be extended to do sorting for doubles and floats.

package com.icodejava.blog.datastructure;

/**
 * @author Kushal Paudyal
 * www.icodejava.com
 * Created On - Feb 18, 2014
 * Last Modified On - Feb 18, 2014
 */
public class BubbleSortInteger {

	public static void main(String args[]) {
		int[] unsortedArray = { 6, 5, 2, 5, 6, 3, 4, 2, 7, 8, 9, 0 };
		printArray("Unsorted Array:", unsortedArray);

		int[] sortedArray = bubbleSortAscending(unsortedArray);

		printArray("Sorted Array (Ascending):", sortedArray);

		sortedArray = bubbleSortDescending(unsortedArray);

		printArray("Sorted Array (Descending):", sortedArray);

	}

	private static int[] bubbleSortDescending(int[] unsortedArray) {

		for (int index = unsortedArray.length - 1; index > 0; index--) {
			for (int bubbleIndex = 0; bubbleIndex < index; bubbleIndex++) {

				if (unsortedArray[index] > unsortedArray[bubbleIndex]) {
					swap(unsortedArray, index, bubbleIndex);
				}

			}
		}

		return unsortedArray; // which is now sorted
	}

	private static int[] bubbleSortAscending(int[] unsortedArray) {

		for (int index = unsortedArray.length - 1; index > 0; index--) {
			for (int bubbleIndex = 0; bubbleIndex < index; bubbleIndex++) {

				if (unsortedArray[index] < unsortedArray[bubbleIndex]) {
					swap(unsortedArray, index, bubbleIndex);
				}

			}
		}

		return unsortedArray; // which is now sorted
	}

	private static void swap(int[] unsortedArray, int firstIndex, int secondIndex) {
		if (unsortedArray == null || firstIndex < 0 || firstIndex > unsortedArray.length
				|| secondIndex < 0 || secondIndex > unsortedArray.length) {
			return;
		}
		int tempInteger = unsortedArray[firstIndex];
		unsortedArray[firstIndex] = unsortedArray[secondIndex];
		unsortedArray[secondIndex] = tempInteger;

	}

	private static void printArray(String string, int[] array) {

		if (array != null && array.length > 0) {
			System.out.print(string + " ");
			for (int i = 0; i < array.length; i++) {
				System.out.print((i > 0 ? "," : "") + array[i]);
			}
		}

		System.out.println();

	}

}

The out of running above program:

Unsorted Array: 6,5,2,5,6,3,4,2,7,8,9,0
Sorted Array (Ascending): 0,2,2,3,4,5,5,6,6,7,8,9
Sorted Array (Descending): 9,8,7,6,6,5,5,4,3,2,2,0