class Main {
public static void main(String[] args) {
int[] a={2,14,21,23,45,2,1,13};
int[] b={2,1,345,2,12,35,312,46,5,32,0};
int[] c={7,43,2,4,53,4,6,44,3,43};
int[] d={0};
int[] e={1,2,3,4,5};
int[] f={5,4,3,2,1};
sort(a,0,a.length);
display(a);
sort(b,0,b.length);
display(b);
sort(c,0,c.length);
display(c);
sort(d,0,d.length);
display(d);
sort(e,0,e.length);
display(e);
sort(f,0,f.length);
display(f);
}
public static void display(int[] arr){
for (int i=0;i<arr.length;i++){
System.out.print(arr[i]+" ");
}
System.out.println();
}
public static boolean sort(int[] arr,int arrStart,int arrEnd){
boolean ok=false;
int mid=(arrStart+arrEnd)/2;
if((arrEnd-arrStart)<=2){
hebing(arr,arrStart,mid,arrEnd);
ok=true;
}else {
sort(arr,arrStart,mid);
sort(arr,mid,arrEnd);
hebing(arr,arrStart,mid,arrEnd);
ok=true;
}
return ok;
}
public static void hebing(int[] arr,int start,int mid,int end){
int index1=start;
int index2=mid;
for (int i=mid;i<end;i++){
int temp=arr[index2];
while (true){
if(arr[index1]<temp){index1++;continue;}
else {
if(index1==index2){}
else if(arr[index1]==temp){
if(index2-index1==1){
}
else {
for (int j=index2;j>index1+1;j--){
arr[j]=arr[j-1];
}
arr[index1+1]=temp;
}
}
else if(arr[index1]>temp){
for (int j=index2;j>index1;j--){
arr[j]=arr[j-1];
}
arr[index1]=temp;
}
}
break;
}
index1++;
index2++;
}
}
}