```java
public static void bubbleSort(int[] arr){
// n-1
for(int pass=0;pass<arr.length-1;pass++){
// i i+1
for(int bubble=0;bubble<arr.length-1-pass;bubble++){
if(arr[bubble]>arr[bubble+1]){
int helper=arr[bubble];
arr[bubble]=arr[bubble+1];
arr[bubble+1]=helper;
}
}
}
}
// on^2
public static void selectionSort(int[] arr){
for(int i=0;i<arr.length;i++){
int minIndex=i;
for(int j=i+1;j<arr.length;j++){
if(arr[minIndex]>arr[j]){
minIndex=j;
}
}
int helper=arr[minIndex];
arr[minIndex]=arr[i];
arr[i]=helper;
}
}
public static void insertionSort(int[] arr){
for(int i=1;i<arr.length;i++){
for(int j=i-1;j>0;j--){
if(arr[i]<arr[j]){
// swap
int helper=arr[i];
arr[i]=arr[j];
arr[j]=arr[i];
}
}
}
}
public static void merge(int[] arr,int low,int mid,int high){
int[] res=new int[high-low+1];
int i=low,j=mid+1;
int k=0;
while(i<=mid&&j<=high){
if(arr[i]<arr[j]){
res[k]=arr[i];
i++;
}else{
res[k]=arr[j];
j++;
}
k++;
}
while(i<=mid){
res[k]=arr[i];
i++;
k++;
}
while(j<=high){
res[k]=arr[j];
j++;
k++;
}
for(int pass=0;pass<res.length;pass++)
arr[low+pass]=res[pass];
}
public static void divide(int[] arr,int start,int end){
if(start==end) return;
int mid=start+(end-start)/2;
divide(arr,start,mid);
divide(arr,mid+1,end);
merge(arr,start,mid,end);
}
```