public void bubbleSort(int[] numbers)
{
/*traverse the array (or a subset of the array) length-1 times*/
for (int highest_unsorted=numbers.length-1; highest_unsorted != 0; highest_unsorted--)
{
/*makes the necessary comparisons for one pass through the array*/
for (int best_so_far=0; best_so_far < highest_unsorted; best_so_far++)
{
/*compare adjacent items and swap them if necessary*/
if (numbers[best_so_far] > numbers[best_so_far+1])
swapNumbers (best_so_far, best_so_far+1);
}
}
}
public void selectionSort(int[] numbers)
{
/*For every index in the array, with the exception of the last one,*/
for(int searcherIndex=0; searcherIndex < numbers.length-1; searcherIndex++)
{
/*Assume that the number is where it's supposed to be*/
int correctIndex = searcherIndex;
/*Try out other candidate indexes*/
for (int candidateIndex=searcherIndex+1; candidateIndex < numbers.length; candidateIndex++)
{
/*If you find a smaller number, make it's index the correct index*/
if(numbers[candidateIndex] < numbers[correctIndex])
correctIndex = candidateIndex;
}
/*At this point correctIndex really will be the correct index*/
swapNumbers (searcherIndex, correctIndex);
}
}
public void insertionSort(int[] numbers)
{
/*going through all of the items in the array*/
for (int insertMe=1; insertMe < numbers.length; insertMe++)
{
/*find the correct index for the item*/
for (int newPosn=0; newPosn < insertMe; newPosn++)
{
/*stop when you come to an item greater than the item in question*/
if (numbers[insertMe] < numbers[newPosn])
{
/*put the item in question somewhere for safe keeping*/
int temp = numbers[insertMe];
/*move everything after the correct index down to make room*/
for (int shift=insertMe; shift > newPosn; )
numbers[shift] = numbers[--shift];
/*put the item in its correct index*/
numbers[newPosn] = temp;
/*You've found the right index for the item and it's time to stop*/
break;
}
}
}
}
/*
*quickSort() calls sortPartition()
*/
public void quickSort(int[] numbers)
{
sortPartition (0, numbers.length-1);
}
/*
* This is a helper method which is used by findPartition() to
* find the "pivot point" - the place to divide the partition.
*/
private int findPivot (int left, int right)
{
return ((right + left)/2);
}
/*
* This is a helper method called by sortNumbers(). It sorts
* an individual partition about the given pivot point.
*/
private int partition (int left, int right, int pivot)
{
do
{
while (numbers[++left] < numbers[pivot]);
while ((right !=0) && (numbers[--right] > numbers[pivot]));
swapNumbers (left, right);
} while (left < right);
swapNumbers (left, right);
return left;
}
/*
* This is a helper method called by sortNumbers(). It recursively
* calls itself on subpartitions to sort the numbers. The actual
* sorting within the partition is done by sortPartition(), which
* is iterative.
*/
private void sortPartition (int left, int right)
{
int pivot = findPivot (left, right);
swapNumbers (pivot, right);
int newpivot= partition (left-1, right, right);
swapNumbers (newpivot, right);
if ((newpivot-left) > 1) sortPartition (left, newpivot-1));
if ((right - newpivot) > 1) sortPartition (newpivot+1, right));
}