public class Sorts{
public static void main(String[] args){
int[] arr = {11, 7, 12, 14, 19, 1, 6, 18, 8, 20 };
int[] arr2 = {25, 44, 16, 62, 76, 19, 12, 5, 25, 9};
int[] arr3 = {12, 14, 3, 8, 20, 9, 26};
int[] arr4 = {12, 4, 2, 8, 5};
int[] arr5 = {3, 17, 18, 1,24, 2, 19};
//printArray(arr);
//selection(arr);
//insertion2(arr2);
printArray(arr2);//change for different array
mergeSort(arr2, 0, arr2.length-1);//change for different array
System.out.println("done");
printArray(arr2);
}
public static void selection(int[] a){
int n = a.length;
for (int i= 0; i < n; i++){
int minPos = i;
for (int j = i+1; j < n; j++){
if (a[j] < a[minPos]){
minPos = j;
}
}
int temp = a[i];
a[i] = a[minPos];
a[minPos] = temp;
printArray(a);
}
}
public static void insertionSort(int[] A){
int itemsSorted;
for (itemsSorted = 1; itemsSorted < A.length; itemsSorted++){
int temp = A[itemsSorted];
int loc = itemsSorted - 1;
while (loc >= 0 && A[loc] > temp){
A[loc + 1] = A[loc];
loc = loc - 1;
}
A[loc + 1] = temp;
//printArray(A);
}
}
public static void insertion2(int[] a){
int n = a.length;
for (int i = 1; i < n; i++){
for ( int j = i; j > 0; j--){
if(a[j-1] > a[j]){
int temp = a[j-1];
a[j-1] = a[j];
a[j] = temp;
}
else{
break;
}
}
printArray(a);
}
}
public static void printArray(int[] a){
for(int elt: a){
System.out.print(elt + " ");
}
System.out.println();
}
/* Pre: recieves an array of ints
* Post: array is sorted in ascending order
*/
public static void mergeSort (int[] a, int l, int r){
if (l >= r) return;
int middle = (l + r)/ 2;
mergeSort(a, l, middle);
mergeSort(a, middle + 1, r);
merge2(a, l, r);
//merge(a, l, middle, r);
printArray(a);
}
public static void merge (int[] a, int left, int mid, int right){
int[] b = new int[mid - left + 1];
for (int i = 0; i <= mid - left; i++){
b[i] = a[left + i];
}
int i = 0;
int j = mid + 1;
int k = left;
while (i <= mid - left && j <= right){
if (a[j] < b[i]){
a[k]= a[j];
k++;
j++;
} else{
a[k]= b[i];
k++;
i++;
}
}
while (i <= mid - left){
a[k] = b[i];
k++;
i++;
}
while (j <= right){
a[k] = a[j];
k++;
j++;
}
}
public static void merge2 (int[] a, int left, int right){
int[] temp = new int[right - left + 1];
if (left >= right ) return;
int mid = (left + right)/2;
int i = 0;//fills temp array
int leftIndex = left;
int rightIndex = mid + 1;
while ((leftIndex <= mid) && (rightIndex <= right)){
if (a[leftIndex] <= a[rightIndex]){
temp[i]= a[leftIndex];
leftIndex++;
} else{
temp[i]= a[rightIndex];
rightIndex++;
}
i++;
}
while (leftIndex <= mid){
temp[i] = a[leftIndex];
leftIndex++;
i++;
}
while (rightIndex <= right){
temp[i] = a[rightIndex];
rightIndex++;
i++;
}
for (i = left; i <= right; i++){
a[i] = temp[i-left];
}
}
/* Pre: recieves an array of ints and two indexes
* Post: the values in the two indexes are swaped
*/
public static void swap(int[] data, int spot1, int spot2)
{
int temp = data[spot1];
data[spot1] = data[spot2];
data[spot2] = temp;
}
}