#include<iostream>
using namespace std;
// Function to sort an array using the Insertion Sort algorithm
void insertion_sort(int n, int arr[])
{
// Display the sorting method being used
cout << "insertion sort" << endl;
// Start from the second element (index 1)
for(int j = 1; j < n; j++)
{
// Store the current element to be inserted
int key = arr[j];
// Index of the previous element
int i = j - 1;
// Move elements greater than key one position to the right
while(i >= 0 && arr[i] > key)
{
arr[i + 1] = arr[i]; // Shift element right
i--;
}
// Insert the key into its correct sorted position
arr[i + 1] = key;
}
}
int main()
{
// Size of the array
int n = 5;
// Initialize the array with unsorted values
int arr[5] = {5, 3, 6, 7, 1};
// Call the insertion sort function
insertion_sort(n, arr);
// Print the sorted array
for(int i = 0; i < n; i++)
{
cout << arr[i] << " ";
}
return 0;
}
I2luY2x1ZGU8aW9zdHJlYW0+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKLy8gRnVuY3Rpb24gdG8gc29ydCBhbiBhcnJheSB1c2luZyB0aGUgSW5zZXJ0aW9uIFNvcnQgYWxnb3JpdGhtCnZvaWQgaW5zZXJ0aW9uX3NvcnQoaW50IG4sIGludCBhcnJbXSkKewogICAvLyBEaXNwbGF5IHRoZSBzb3J0aW5nIG1ldGhvZCBiZWluZyB1c2VkCiAgIGNvdXQgPDwgImluc2VydGlvbiBzb3J0IiA8PCBlbmRsOwoKICAgLy8gU3RhcnQgZnJvbSB0aGUgc2Vjb25kIGVsZW1lbnQgKGluZGV4IDEpCiAgIGZvcihpbnQgaiA9IDE7IGogPCBuOyBqKyspCiAgIHsKICAgICAgLy8gU3RvcmUgdGhlIGN1cnJlbnQgZWxlbWVudCB0byBiZSBpbnNlcnRlZAogICAgICBpbnQga2V5ID0gYXJyW2pdOwoKICAgICAgLy8gSW5kZXggb2YgdGhlIHByZXZpb3VzIGVsZW1lbnQKICAgICAgaW50IGkgPSBqIC0gMTsKCiAgICAgIC8vIE1vdmUgZWxlbWVudHMgZ3JlYXRlciB0aGFuIGtleSBvbmUgcG9zaXRpb24gdG8gdGhlIHJpZ2h0CiAgICAgIHdoaWxlKGkgPj0gMCAmJiBhcnJbaV0gPiBrZXkpCiAgICAgIHsKICAgICAgICAgYXJyW2kgKyAxXSA9IGFycltpXTsgLy8gU2hpZnQgZWxlbWVudCByaWdodAogICAgICAgICBpLS07CiAgICAgIH0KCiAgICAgIC8vIEluc2VydCB0aGUga2V5IGludG8gaXRzIGNvcnJlY3Qgc29ydGVkIHBvc2l0aW9uCiAgICAgIGFycltpICsgMV0gPSBrZXk7CiAgIH0KfQoKaW50IG1haW4oKQp7CiAgIC8vIFNpemUgb2YgdGhlIGFycmF5CiAgIGludCBuID0gNTsKCiAgIC8vIEluaXRpYWxpemUgdGhlIGFycmF5IHdpdGggdW5zb3J0ZWQgdmFsdWVzCiAgIGludCBhcnJbNV0gPSB7NSwgMywgNiwgNywgMX07CgogICAvLyBDYWxsIHRoZSBpbnNlcnRpb24gc29ydCBmdW5jdGlvbgogICBpbnNlcnRpb25fc29ydChuLCBhcnIpOwoKICAgLy8gUHJpbnQgdGhlIHNvcnRlZCBhcnJheQogICBmb3IoaW50IGkgPSAwOyBpIDwgbjsgaSsrKQogICB7CiAgICAgIGNvdXQgPDwgYXJyW2ldIDw8ICIgIjsKICAgfQoKICAgcmV0dXJuIDA7Cn0=