class Sorts
{
// bubble sort
public static int[] bubbleSort(int[] array)
{
int pass = 0;
boolean sorted = true;
do
{
for(int ii = 0; ii < (array.length-pass)-1; ii++)
{
if(array[ii] > array[ii+1])
{
int temp = array[ii];
array[ii] = array[ii+1];
array[ii+1] = temp;
sorted = false;
}
}
pass++;
} while(sorted != true);
return array;
}//bubbleSort()
// selection sort
public static int[] selectionSort(int[] array)
{
for(int nn = 0; nn < array.length-1; nn++)
{
int midIdx = nn;
for(int jj = nn++; jj < array.length-1; jj++)
{
if(array[jj] < array[midIdx])
{
midIdx = jj;
}
}
int temp = array[midIdx];
array[midIdx] = array[nn];
array[nn] = temp;
}
return array;
}// selectionSort()
// insertion sort
public static int[] insertionSort(int[] array)
{
for(int nn = 1; nn < array.length-1; nn++)
{
int ii = nn;
int temp = array[ii];
while (ii > 0 && array[ii-1] > temp)
{
array[ii] = array[ii-1];
ii--;
}
array[ii] = temp;
}
return array;
}// insertionSort()
// mergeSort - wrapper method for kick-starting the recursive algorithm
public static void mergeSort(int[] array)
{
int leftIdx = 0, rightIdx = array.length-1;
array = mergeSortRecurse(array, leftIdx, rightIdx);
}//mergeSort()
private static int[] mergeSortRecurse(int[] array, int leftIdx, int rightIdx)
{
if(leftIdx < rightIdx)
{
int midIdx = (leftIdx + rightIdx) / 2;
mergeSortRecurse(array, leftIdx, midIdx);
mergeSortRecurse(array, midIdx++, rightIdx);
merge(array, leftIdx, midIdx, rightIdx);
}
return array;
}//mergeSortRecurse()
private static int[] merge(int[] array, int leftIdx, int midIdx, int rightIdx)
{
int[] tempArr = new int[leftIdx - rightIdx + 1];
int ii = leftIdx, jj = midIdx++, kk = 0;
while(ii <= midIdx && jj <= rightIdx)
{
if(array[ii] < array[jj])
{
tempArr[kk] = array[ii];
ii++;
}
else
{
tempArr[kk] = array[jj];
jj++;
}
kk++;
}
for(ii = ii; ii < midIdx; ii++)
{
tempArr[kk] = array[ii];
kk++;
}
for(jj = jj; jj < rightIdx; jj++)
{
tempArr[kk] = array[jj];
kk++;
}
for(kk = kk; kk < leftIdx; kk++)
{
array[kk] = tempArr[kk - leftIdx];
}
return array;
}//merge()
// quickSort - wrapper method for kick-starting the recursive algorithm
public static void quickSort(int[] array)
{
int leftIdx = 0, rightIdx = array.length-1;
array = quickSortRecurse(array, leftIdx, rightIdx);
}//quickSort()
private static int[] quickSortRecurse(int[] array, int leftIdx, int rightIdx)
{
if(rightIdx > leftIdx)
{
int pivotIdx = (leftIdx+rightIdx)/2;
int newPivotIdx = doPartioning(array, leftIdx, rightIdx, pivotIdx);
quickSortRecurse(array, leftIdx, newPivotIdx-1);
quickSortRecurse(array, newPivotIdx+1, rightIdx);
}
return array;
}//quickSortRecurse()
private static int doPartitioning(int[] array, int leftIdx, int rightIdx, int pivotIdx)
{
int pivotVal = array[pivotIdx];
array[pivotIdx] = array[rightIdx];
array[rightIdx] = pivotVal;
int currIdx = leftIdx;
for(int ii = leftIdx; ii < rightIdx-1; ii++)
{
if(array[ii] , pivotVal)
{
int temp = array[ii];
array[ii] = array[currIdx];
array[currIdx] = temp;
currIdx++;
}
}
int newPivotIdx = currIdx;
array[rightIdx] = array[newPivotIdx];
array[newPivotIdx] = pivotVal;
return newPivotIdx;
}// TEMP - Replace this when you implement QuickSort }//doPartitioning
}//end Sorts class