In: Computer Science
I have this program, it sorts a file using shell sort and quick sort then prints amount of comparisons and swaps. I need to add the bubble sort algorithm. Here is the code. The language is Java.
import java.util.Scanner;
import java.io.File;
import java.io.FileNotFoundException;
public class Sort
{
public static int numOfComps = 0,numOfSwaps = 0;
public static void main(String[] args)
{
try{
Scanner scanner = new Scanner(new
File("a.txt"));//your text file here
int [] values = new int
[100];
int i = 0;
while(scanner.hasNextInt())
{
values[i++] =
scanner.nextInt();
}
int n=i;
int arr[]=new int[n];
for(i=0;i<n;i++)
arr[i]=values[i];
System.out.println("\n\nQuick Sort:");
// Display the
array's contents.
System.out.println("\nOriginal order: ");
for(i=0;i<n;i++)
System.out.print(arr[i] + " ");
// Sort the array.
quickSort(arr,n);
// Display the array's contents.
System.out.println("\nSorted order: ");
for(i=0;i<n;i++)
System.out.print(arr[i] + " ");
System.out.println("\n\nNumber of comps = " + numOfComps);
System.out.println("Number of swaps = " +
numOfSwaps);
numOfComps =
0;
numOfSwaps =
0;
System.out.println("\n\nShell Sort:");
// Display the
array's contents.
System.out.println("\nOriginal order: ");
for(i=0;i<n;i++)
System.out.print(values[i] + " ");
//
Sort the array.
shellSort(values,n);
// Display the array's contents.
System.out.println("\nSorted order: ");
for(i=0;i<n;i++)
System.out.print(values[i] + " ");
System.out.println("\n\nNumber of comps = " + numOfComps);
System.out.println("Number of swaps = " + numOfSwaps);
System.out.println();
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
}
public static void quickSort(int array[],int n
)
{
doQuickSort(array, 0, n- 1);
}
private static void doQuickSort(int array[], int
start, int end)
{
int pivotPoint;
if (start < end)
{
//numOfComps++;
// Get the
pivot point.
pivotPoint =
partition(array, start, end);
// Sort the
first sub list.
doQuickSort(array,
start, pivotPoint - 1);
// Sort the
second sub list.
doQuickSort(array,
pivotPoint + 1, end);
}
}
private static int partition(int array[], int
start, int end)
{
int pivotValue; //
To hold the pivot value
int endOfLeftList; // Last element
in the left sub list.
int
mid; //
To hold the mid-point subscript
// Find the subscript of the
middle element.
// This will be our pivot
value.
mid = (start + end) / 2;
// Swap the middle element with
the first element.
// This moves the pivot value to the
start of
// the list.
swap(array, start, mid);
// Save the pivot value for
comparisons.
pivotValue = array[start];
// For now, the end of the left
sub list is
// the first element.
endOfLeftList = start;
// Scan the entire list and move
any values that
// are less than the pivot value to
the left
// sub list.
for (int scan = start + 1; scan
<= end; scan++)
{
if (array[scan]
< pivotValue)
{
endOfLeftList++;
swap(array, endOfLeftList, scan);
numOfSwaps ++;
}
numOfComps++;
}
// Move the pivot value to end of
the
// left sub list.
swap(array, start,
endOfLeftList);
// Return the subscript of the
pivot value.
return endOfLeftList;
}
private static void swap(int[] array, int a, int
b)
{
int temp;
temp =
array[a];
array[a] =
array[b];
array[b] =
temp;
}
//shell sort
public static void SegmentedInsertionSort
(int[] array, int N, int gap)
{
for (int index = gap ;
index < N ; index++)
{
int temp;
int j = index - gap;
while (j >= 0)
{
numOfComps++;
if (array[j]>array[j+gap])
{
temp = array[j];
array[j] = array[j + gap];
array[j + gap] = temp;
j = j - gap;
numOfSwaps++;
}
else j = -1;
}
}
}
public static void shellSort (int[] array,int
n)
{
int N = n;
int gap = N/2;
while (gap > 0)
{
SegmentedInsertionSort(array, N, gap);
gap = gap / 2;
}
}
}
Program: In this program, we add the bubble sort function, which keeps count of the total number of comparisons and swaps made during the sorting. The total number of comparisons made in a bubble sort is (n*(n-1))/2.
Below is the implementation:
Code:
import java.util.Scanner; import java.io.File; import java.io.FileNotFoundException; public class Sort { public static int numOfComps = 0,numOfSwaps = 0; public static void main(String[] args) { try{ Scanner scanner = new Scanner(new File("a.txt"));//your text file here int [] values = new int [100]; int i = 0; while(scanner.hasNextInt()) { values[i++] = scanner.nextInt(); } int n=i; int arr[]=new int[n]; int array[] = new int[n]; for(i=0;i<n;i++) { arr[i] = values[i]; array[i] = values[i]; } System.out.println("\n\nQuick Sort:"); // Display the array's contents. System.out.println("\nOriginal order: "); for(i=0;i<n;i++) System.out.print(arr[i] + " "); // Sort the array. quickSort(arr,n); // Display the array's contents. System.out.println("\nSorted order: "); for(i=0;i<n;i++) System.out.print(arr[i] + " "); System.out.println("\n\nNumber of comps = " + numOfComps); System.out.println("Number of swaps = " + numOfSwaps); numOfComps = 0; numOfSwaps = 0; System.out.println("\n\nShell Sort:"); // Display the array's contents. System.out.println("\nOriginal order: "); for(i=0;i<n;i++) System.out.print(values[i] + " "); // Sort the array. shellSort(values,n); // Display the array's contents. System.out.println("\nSorted order: "); for(i=0;i<n;i++) System.out.print(values[i] + " "); System.out.println("\n\nNumber of comps = " + numOfComps); System.out.println("Number of swaps = " + numOfSwaps); numOfComps = 0; numOfSwaps = 0; System.out.println("\n\nBubble Sort:"); // Display the array's contents. System.out.println("\nOriginal order: "); for(i=0;i<n;i++) System.out.print(array[i] + " "); // Sort the array. bubbleSort(array); // Display the array's contents. System.out.println("\nSorted order: "); for(i=0;i<n;i++) System.out.print(array[i] + " "); System.out.println("\n\nNumber of comps = " + numOfComps); System.out.println("Number of swaps = " + numOfSwaps); } catch (FileNotFoundException e) { e.printStackTrace(); } } public static void quickSort(int array[],int n ) { doQuickSort(array, 0, n- 1); } private static void doQuickSort(int array[], int start, int end) { int pivotPoint; if (start < end) { //numOfComps++; // Get the pivot point. pivotPoint = partition(array, start, end); // Sort the first sub list. doQuickSort(array, start, pivotPoint - 1); // Sort the second sub list. doQuickSort(array, pivotPoint + 1, end); } } private static int partition(int array[], int start, int end) { int pivotValue; // To hold the pivot value int endOfLeftList; // Last element in the left sub list. int mid; // To hold the mid-point subscript // Find the subscript of the middle element. // This will be our pivot value. mid = (start + end) / 2; // Swap the middle element with the first element. // This moves the pivot value to the start of // the list. swap(array, start, mid); // Save the pivot value for comparisons. pivotValue = array[start]; // For now, the end of the left sub list is // the first element. endOfLeftList = start; // Scan the entire list and move any values that // are less than the pivot value to the left // sub list. for (int scan = start + 1; scan <= end; scan++) { if (array[scan] < pivotValue) { endOfLeftList++; swap(array, endOfLeftList, scan); numOfSwaps ++; } numOfComps++; } // Move the pivot value to end of the // left sub list. swap(array, start, endOfLeftList); // Return the subscript of the pivot value. return endOfLeftList; } private static void swap(int[] array, int a, int b) { int temp; temp = array[a]; array[a] = array[b]; array[b] = temp; } //shell sort public static void SegmentedInsertionSort (int[] array, int N, int gap) { for (int index = gap ; index < N ; index++) { int temp; int j = index - gap; while (j >= 0) { numOfComps++; if (array[j]>array[j+gap]) { temp = array[j]; array[j] = array[j + gap]; array[j + gap] = temp; j = j - gap; numOfSwaps++; } else j = -1; } } } public static void shellSort (int[] array,int n) { int N = n; int gap = N/2; while (gap > 0) { SegmentedInsertionSort(array, N, gap); gap = gap / 2; } } // Bubble Sort public static void bubbleSort(int[] array) { int n = array.length; // Create a for loop till array.length - 1 for (int i = 0; i < n-1; i++) { // Compare each element with its next element for (int j = 0; j < n-i-1; j++) { // Increment number of Comparisons numOfComps++; if(array[j] > array[j+1]) { int temp = array[j]; array[j] = array[j+1]; array[j+1] = temp; // If a swap is made then increment number of swaps numOfSwaps++; } } } } }
Output: