Data Structure and Algorithms Insertion Sort

Md. Riadul Islam
TechBongo
Published in
5 min readAug 2, 2017

Insertion Sort সাধারণ sorting আলগরিদম । এটা আমাদের হাতে কার্ড খেলার সময় যেভাবে সাজানোর চেষ্টা করি । সেরকম একটা উপাই ।

Insertion-Sort-300x257

এটাই মুল তথ্য ।

Insertion sort ভিত্তি করে একটা আইডিয়া এর উপর সেটা হলো :

একটা উপাদান (Element) ইনপুট থেকে নিয়ে ধরে ধরে দেখে প্রত্যেক iteration । যতক্ষণ না পর্যন্ত ওই উপাদানের নিদিষ্ট জায়গা খুজে না পায় । উলেখ্য যে যার অবস্থান একটি সাজানো array এর মধ্যে অবস্থিত ।

এই iteration এমন ভাবে চলে যে ১ম উপাদানের সাথে ২য় উপাদানের কম্পেয়ার করে swap এর মাধ্যমে চলে । এবং এর সঠিক জায়গা নির্ধারণ করে । ১ম উপাদান যদি ২য় উপাদান থেকে বড় হয় তাহলে তাদের জায়গা পরিবর্তন করবে । আবার যদি দেখা যায় ১ম উপাদানটা ছোট ২য় উপাদান থেকে তাহলে তাদের জায়গার কোনও পরিবর্তন করা যাবে না । উলেখ্য যে একটা একটা করে নিদিষ্ট উপাদানের সাথে কম্পেয়ার করতে হবে । নিচের উদাহরণটা দেখলে সম্পূর্ণ বিষয়টা ক্লিয়ার হবে ।

# আমরা এমন একটা array নিবো যেটা sorted না ।

unsorted_array

Insertion Sort তুলনা করবে প্রথমের দুইটা উপাদানের মধ্যে অর্থাৎ 14 ও 33 এর মধ্যে ।

insertion_sort_1

আমরা এখানে একটা জিনিশ লক্ষ্য করতে পারছি যে আগে থেকেই এখানে 14 ও 33 উভয়ই Ascending order এ সাজানো আছে । তাই 14 হলো sorted sub-list ।

insertion_sort_2

Insertion Sort একধাপ এগিয়ে গেলো এবং 33 এবং 27 এর মধ্যে তুলনা করবে । এবং আমরা দেখতে পাচ্ছি যে 33 এবং 27 তারা তাদের সঠিক পজিশানে নেই ।

insertion_sort_4

এটা Swap করবে 33 এবং 27 এর মধ্যে । এখানে আরো দেখতে হবে যে , sorted sub-list এর সাথে সঠিক পজিশানে আছে কি না । এখানে আমরা দেখতে পাচ্ছি যে , sub-list এ শুধুমাত্র একটি উপাদান 14 । এবং 27 হলো 14 থেকে বড় । অতঃ পর sorted sub-list সাজানো হয় swapping এর পর ।

insertion_sort_5

এখন 14 এবং 27 sorted sub-list । Insertion Sort একধাপ এগিয়ে গেলো এবং 33 এবং 10 এর মধ্যে তুলনা করবে । এবং আমরা দেখতে পাচ্ছি যে 33 এবং 10 তারা তাদের সঠিক পজিশানে নেই ।

insertion_sort_7.jpg

এটা Swap করবে 33 এবং 10 এর মধ্যে ।

insertion_sort_8.jpg

এর মধ্যে 27 এবং 10 unsorted । একে sorted করতে হবে ।

insertion_sort_9

একে অর্থাৎ 27 এবং 10 sorted করতে হবে ।

insertion_sort_10.jpg

পুনরায় 14 এবং 10 unsorted । একে sorted করতে হবে ।

insertion_sort_11.jpg

পুনরায় অর্থাৎ 14 এবং 10 sorted করতে হবে । ৩য় iteration এর পর । এখন আমাদের কাছে আছে ৪টা sorted sub-list ।

insertion_sort_12

এভাবে insertion sort চলতেই থাকবে । যতক্ষণ না পর্যন্ত শেষ array উপাদান sorted sub-list না হয় ।

# Algorithm

Step 1 − If it is the first element, it is already sorted. return 1;
Step 2 − Pick next element
Step 3 − Compare with all elements in the sorted sub-list
Step 4 − Shift all the elements in the sorted sub-list that is greater than the
value to be sorted
Step 5 − Insert the value
Step 6 − Repeat until list is sorted

# Pseudocode

INSERTION-SORT (A, n) ⊳ A[0 . . n]

for j ← 1 to n

do key ← A[ j]

i ← j — 1

while i > =0 and A[i] > key

do A[i+1] ← A[i]

i ← i — 1

A[i+1] = key

Time Complexity: O(n*n)

Auxiliary Space: O(1)

#JAVA_CODE :

class InsertionSort{
/*Function to sort array using insertion sort*/
void sort(int arr[]) {
int n = arr.length;
for (int i = 1; i < n; ++i) {
int key = arr[i];
int j = i — 1;

/* Move elements of arr[0..i-1], that are
greater than key, to one position ahead
of their current position */
while (j >= 0 && arr[j] > key) {
arr[j + 1] = arr[j];
j = j — 1;
}
arr[j + 1] = key;
}
}

/* A utility function to print array of size n*/

static void printArray(int arr[]) {
int n = arr.length;
for (int i = 0; i < n; ++i)
System.out.print(arr[i] + “ “);

System.out.println();
}

// Driver method
public static void main(String args[]) {
int arr[] = {12, 11, 13, 5, 6};

InsertionSort ob = new InsertionSort();
ob.sort(arr);

printArray(arr);
}

#PYTHON_CODE :

Algorithm insertion sort with visualize python Code

[code language=”python”]# Python program for implementation of Insertion Sort
def insertion_sort(list):
for j in range(1, len(list)):
value = list[j]
i = j-1
while i>= 0:
if value < list[i]:
list[i+1] = list[i]
i = i-1
list[i+1] = value
else:
break
return list
a = [2,1,4,3]
print(insertion_sort(a))[/code]

--

--

Md. Riadul Islam
TechBongo

I am a software Engineer. | I am really passionate about programming and experimenting with new things.