Skip to main content

### Insertion Sort in JAVA

What is insertion sort?

It is a sorting technique that is based on the partitioning of array into two parts like selection sort, sorted and unsorted.

The process is:-

compare adjacent elements.
if(left > right)
Swap the element
{
check for sorted array whether it is still in sort manner(put j=i and loop in until j is not equal to zero)
- No
check for if(right<left)
swap
do it until at the end of position.
}

Implementation:-

`Underline eleemnts are part of sorted array`

```inside main array loop 14 27 10 33 35 19 42 4 (14 10 27 33 35 19 42 4 (here sorted array is distorted hence sorting has been done inside the loop)
inside sorted array loop 10 14 27 33 35 19 42 4
inside main array loop 10 14 27 33 35 19 42 4
inside main array loop 10 14 27 33 35 19 42 4
inside main array loop 10 14 27 33 35 19 42 4
inside sorted array loop 10 14 27 19 33 35 42 4
inside sorted array loop 10 14 19 27 33 35 42 4
inside main array loop 10 14 19 27 33 35 42 4
inside main array loop 10 14 19 27 33 35 42 4
inside sorted array loop 10 14 19 27 33 4 35 42
inside sorted array loop 10 14 19 27 4 33 35 42
inside sorted array loop 10 14 19 4 27 33 35 42
inside sorted array loop 10 14 4 19 27 33 35 42
inside sorted array loop 10 4 14 19 27 33 35 42
inside sorted array loop 4 10 14 19 27 33 35 42
inside main array loop 4 10 14 19 27 33 35 42 (final sorted array)
```

Program:-

```package sorting;

public class InsertionSort {

//function to print array
public static void print(int[] arr)
{
for(int i=0;i<=arr.length-1;i++)
System.out.print(" "+arr[i]);
System.out.println(" ");
}

//function to swap elements
public static int[] swap(int[] arr,int i, int j)
{
int temp;
temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;

return arr;
}

public static void main(String[] args)
{
int[] arr={14,27,10,33,35,19,42,4};
int j;
for(int i=0;i<arr.length-1;i++)
{
if(arr[i]>arr[i+1])
{
swap(arr,i,(i+1));
j=i;
for(;j>0;j--)
{
if(arr[j]<arr[j-1])
{
swap(arr,j,(j-1));
System.out.print("    "+"inside sorted array loop");
print(arr);
}
}

}
System.out.print("inside main array loop");
print(arr);
}

}
}
```

### Basics of System Design

This article is first one from the series of articles dedicated to system design interviews. Here i am going to present the base scenario to consider before starting to solve system design problems.
Questions to ask?
1) what is the number of requests a website will recieve in a day/month/second? 2) what is the amount of memory a website will deal in a day/month/second? 3) what is the number of servers that can accomodate these requests?
To answer this , first we need to remember the below numbers:-
1 million = 10 lakh = 1000000 = 10^6 1 billion = 1000 million = 10^9
1 KB = 1024 B = 10^31 MB= 10^6 = 1024 KB 1 GB= 10^9 = 1024 MB1 TB = 10^12 = 1024 GB
Memory we need to see in BytesRequests we need to see in numbers
example :-
suppose a website recieves 100M requests every month then:-
requests per day = request per month /24 = 416700 requests requests per second = requests per day / (24*3600) = 4.8 requests per second
memory:-
if we take 20:80 principal where 20 percent is write and 80 percent is …

### Calculating size of User and Cache storage

user storage:-
it can be solved using same scenario as mentioned in first article .

https://tech.nazarmubeenworks.com/2019/08/basics-of-system-design-chapter-0.html

Suppose there are 12 Million of users are adding every year meaning 1 Million per month.
So if we consider 5 year there will be around 60 million of users. Now in terms of data we can look to our DB table and get information about it. A user will be generally having name , id , address , some forien keys .
Lets assume 10 columns with each column on an average storing 4 byte of data.
10*4 = 40 bytes of data for one user.
60 * 10^6 * 40 = 2400 * 10^6 = 2.4 * 10^9 = 2.4 GB of data we need to store only user values.
Also while calculating storage for the user there is also one important point we need to remember is of ids. If we are going to have 60 Million of users which means 60*10^6 users so unique id’s will be
as we know below figures are almost equal
2^10=10^3 then 60*(10^3)^2 = 2^20 *2^6
which means we almost need 26 …