- عمومي کتنه
- عمومي الګوریتم
- Pseudocode
- انځورګري
- C++ بیلګه
- Java Example
- Complexity Analysis Of The Insertion Sort Algorithm
- Conclusion
د کلاسیک مثالونو سره د ننوتلو ترتیب ته ژوره کتنه.
د داخلولو ترتیب د ترتیب کولو تخنیک دی چې په داسې طریقه لیدل کیدی شي چې موږ په لاس کې کارتونه لوبوو. لکه څنګه چې موږ په ډیک کې کوم کارت داخل کړو یا یې لرې کړو، د داخلولو ډولونه په ورته ډول کار کوي.
د داخلولو ترتیب الګوریتم تخنیک د بلبل ډول او انتخاب ترتیب کولو تخنیکونو څخه ډیر اغیزمن دی مګر د نورو تخنیکونو په پرتله لږ اغیزمن دی. لکه Quicksort او Merge sort.
عمومي کتنه
د داخلولو د ترتیب په تخنیک کې، موږ د دویم عنصر څخه پیل کوو او د لومړي عنصر سره پرتله کوو او دا یې واچوو. په یو مناسب ځای کې. بیا موږ دا پروسه د راتلونکو عناصرو لپاره ترسره کوو.
موږ هر عنصر د هغه ټولو پخوانیو عناصرو سره پرتله کوو او عنصر په خپل مناسب ځای کې کیږدو یا داخل کړو. د ننوتلو ترتیب کولو تخنیک د لږ شمیر عناصرو سره د صفونو لپاره خورا ممکن دی. دا د تړل شوي لیستونو ترتیب کولو لپاره هم ګټور دی.
تړل شوي لیستونه راتلونکي عنصر ته اشاره کوي (د یو واحد تړل شوي لیست په صورت کې) او پخواني عنصر ته هم اشاره کوي (د دوه ځله تړل شوي لیست په صورت کې ). له همدې امله د تړل شوي لیست لپاره د ننوتلو ترتیب پلي کول اسانه کیږي.
راځئ چې پدې ټیوټوریل کې د ننوتلو ترتیب په اړه ټول وپلټو. 3>
عمومي الګوریتم
مرحله 1 : د K = 1 څخه تر N-1
2 مرحلې له 2 څخه تر 5 پورې تکرار کړئ: temp = A[K]
دریم ګام : J = K ترتیب کړئ– 1
۴ ګام : د تودوخې په وخت کې تکرار کړئ =A[J]
A[J + 1] = A[J]
سیټ J = J – 1
[د داخلي لوپ پای]
5 ګام : ترتیب کړئ A[J + 1] = temp
[ د لوپ پای]
مرحله 6 : exit
په دې توګه، د داخلولو ترتیب تخنیک کې، موږ د دویم عنصر څخه پیل کوو ځکه چې موږ فرض کوو چې لومړی عنصر تل ترتیب شوی وي. . بیا له دویم عنصر څخه تر وروستي عنصر پورې، موږ هر عنصر د هغې ټولو پخوانیو عناصرو سره پرتله کوو او هغه عنصر په مناسب ځای کې ځای په ځای کوو.
Pseudocode
د داخلولو ترتیب لاندې ورکړل شوی دی.
procedure insertionSort(array,N ) array – array to be sorted N- number of elements begin int freePosition int insert_val for i = 1 to N -1 do: insert_val = array[i] freePosition = i //locate free position to insert the element whilefreePosition> 0 and array[freePosition -1] >insert_val do: array [freePosition] = array [freePosition -1] freePosition = freePosition -1 end while //insert the number at free position array [freePosition] = insert_val end for end procedure
پورته ورکړل شوی د داخلولو ترتیب لپاره سیډو کوډ دی، بیا به موږ دا تخنیک په لاندې مثال کې تشریح کړو.
انځورګري
هغه صف چې ترتیب کیږي په لاندې ډول دی:
اوس د هر پاس لپاره، موږ اوسنی عنصر د دې ټولو پخوانیو عناصرو سره پرتله کوو. نو په لومړي پاس کې، موږ د دویم عنصر سره پیل کوو.
په دې توګه موږ د پاسونو شمیر ته اړتیا لرو ترڅو په بشپړ ډول د عناصرو N شمیره ولري. 0> پورتني مثال په جدول کې لنډیز کیدی شي:
پاس | غیر ترتیب شوی لیست | > پرتله کولترتیب شویلست | |
---|---|---|---|
1 | {12,3,5,10,8,1} | {12,3} | {3,12,5,10,8,1} |
2 | {3,12,5,10,8,1}17 | {3,12,5} | {3,5,12,10,8,1} |
3 | { 3,5,12,10,8,1} | {3,5,12,10} | {3,5,10,12,8,1} |
4 | {3,5,10,12,8,1} | {3,5,10,12,8} | {3,5,8,10,12,1} |
5 | {3,5,8,10,12,1} | {3,5,8,10,12,1} | {1,3,5,8,10,12} |
6 | لکه څنګه چې ښودل شوي پورته مثال، موږ د دوهم عنصر سره پیل کوو ځکه چې موږ فرض کوو چې لومړی عنصر تل ترتیب شوی وي. نو موږ د لومړي عنصر سره د دوهم عنصر پرتله کولو سره پیل کوو او که چیرې دوهم عنصر له لومړي څخه کم وي نو موقعیت بدلوو.
دا د پرتله کولو او بدلولو پروسه دوه عناصر په خپلو مناسبو ځایونو کې ځای په ځای کوي. بیا، موږ دریم عنصر د هغه پخوانیو (لومړی او دویم) عناصرو سره پرتله کوو او ورته کړنلاره ترسره کوو ترڅو دریم عنصر په مناسب ځای کې ځای پرځای کړو.
پدې ډول، د هرې پاس لپاره، موږ یو عنصر په کې ځای په ځای کوو. د هغه ځای. د لومړي پاس لپاره، موږ دویم عنصر په خپل ځای کې ځای پرځای کوو. په دې توګه په عموم کې، د N عناصرو په مناسب ځای کې د ځای په ځای کولو لپاره، موږ د N-1 پاسونو ته اړتیا لرو.
وروسته، موږ به په C++ ژبه کې د داخلولو ترتیب تخنیک پلي کول وښیو.
C++ بیلګه
#include using namespace std; int main () { int myarray[10] = { 12,4,3,1,15,45,33,21,10,2}; cout"\nInput list is \n"; for(int i=0;i10;i++) { cout="" Output:
Input list is
12 4 3 1 15 45 33 21 10 2
Sorted list is
1 2 3 4 10 12 15 21 33 45
Next, we will see the Java implementation of the Insertion sort technique.
Java Example
public class Main { public static void main(String[] args) { int[] myarray = {12,4,3,1,15,45,33,21,10,2}; System.out.println("Input list of elements ..."); for(int i=0;i10;i++) { System.out.print(myarray[i] + " "); } for(int k=1; k=0 && temp = myarray[j]) { myarray[j+1] = myarray[j]; j = j-1; } myarray[j+1] = temp; } System.out.println("\nsorted list of elements ..."); for(int i=0;i10;i++) { System.out.print(myarray[i] + " "); } } }Output:
Input list of elements …
12 4 3 1 15 45 33 21 10 2
sorted list of elements …
1 2 3 4 10 12 15 21 33 45
In both the implementations, we can see that we begin sorting from the 2nd element of the array (loop variable j = 1) and repeatedly compare the current element to all its previous elements and then sort the element to place it in its correct position if the current element is not in order with all its previous elements.
Insertion sort works the best and can be completed in fewer passes if the array is partially sorted. But as the list grows bigger, its performance decreases. Another advantage of Insertion sort is that it is a Stable sort which means it maintains the order of equal elements in the list.
Complexity Analysis Of The Insertion Sort Algorithm
From the pseudo code and the illustration above, insertion sort is the efficient algorithm when compared to bubble sort or selection sort. Instead of using for loop and present conditions, it uses a while loop that does not perform any more extra steps when the array is sorted.
However, even if we pass the sorted array to the Insertion sort technique, it will still execute the outer for loop thereby requiring n number of steps to sort an already sorted array. This makes the best time complexity of insertion sort a linear function of N where N is the number of elements in the array.
Thus the various complexities for Insertion sort technique are given below:
Worst case time complexity O(n 2 ) Best case time complexity O(n) Average time complexity O(n 2 ) Space complexity O(1) In spite of these complexities, we can still conclude that Insertion sort is the most efficient algorithm when compared with the other sorting techniques like Bubble sort and Selection sort.
Conclusion
Insertion sort is the most efficient of all the three techniques discussed so far. Here, we assume that the first element is sorted and then repeatedly compare every element to all its previous elements and then place the current element in its correct position in the array.
In this tutorial, while discussing Insertion sort we have noticed that we compare the elements using an increment of 1 and also they are contiguous. This feature results in requiring more passes to get the sorted list.
In our upcoming tutorial, we will discuss “Shell sort” which is an improvement over the Selection sort.
In shell sort, we introduce a variable known as “increment” or a “gap” using which we divide the list into sublists containing non-contiguous elements that “gap” apart. Shell sort requires fewer passes when compared to Insertion sort and is also faster.
In our future tutorials, we will learn about two sorting techniques, “Quicksort” and “Mergesort” which use “Divide and conquer” strategy for sorting data lists.