#include <iostream>
using namespace std;
void printArray(int arr[], int n){
int i;
for(i = 0; i < n; i++){
cout << arr[i] << " ";
}
cout << endl;
}
void linearSearch(int a[], int key, int n){
int i;
for(i = 0; i < n; i++){
if(a[i] == key){
cout << " Found at: " << i << " th index" << endl;
return;
}
else
cout << "Not Found" << endl;
}
}
void binarySearch(int a[], int key, int n){
int i, mid;
int high = n;
int low = 0;
while(low < high){
mid = (low + high) / 2;
if(a[mid] == key){
cout << "Found at: " << mid << " th index" << endl;
return;
}
else if(a[mid] < key){
low = mid + 1;
}
else if(a[mid] > key)
high = mid - 1;
else
cout << "Not found" << endl;
}
}
void bubbleSort(int a[], int n){
int i, j;
int temp = 0;
for(i = 0; i < n; i++){
for(j = 0; j < n - i - 1; j++){
if(a[j] > a[j+1]){
temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
}
}
void selectionSort(int a[], int n){
int i, j;
for(i = 0; i < n; i++){
int minIndex = i;
for(j = i + 1; j < n; j++){
if(a[minIndex] > a[j]){
minIndex = j;
}
}
int temp = a[i];
a[i] = a[minIndex];
a[minIndex] = temp;
printArray(a, n);
}
}
void insertionSort(int a[], int n){
int i, j, key;
for(i = 1; i < n; i++){
key = a[i];
j = i - 1;
while(a[j] > key && j >= 0){
a[j+1] = a[j];
j--;
}
a[j+1] = key;
printArray(a, n);
cout << endl;
}
}
int quickPartition(int a[], int low, int high){
int i, j, pi;
pi = high;
i = low - 1;
int temp;
for(j = low; j < high; j++){
if(a[j] < a[pi]){
i++;
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
cout << "In side loop j: " << j << " th iteratio" << endl;
cout << endl;
cout << endl;
printArray(a, high+1);
}
temp = a[high];
a[high] = a[i+1];
a[i+1] = temp;
cout << "before return " << i << " th iteratio" << endl;
cout << endl;
cout << endl;
printArray(a, high+1);
return i + 1;
}
void quickSort(int a[], int low, int high){
if(low < high){
int pi = quickPartition(a, low, high);
quickSort(a, low, pi-1);
quickSort(a, pi+1, high);
}
}
void merge(int a[], int l, int mid, int h){
int n1 = (mid + 1 - l);
int n2 = (h - mid);
int al[n1];
int ar[n2];
int x, y;
for(x = 0; x < n1; x++){
al[x] = a[l+x];
}
for(x = 0; x < n2; x++){
ar[x] = a[mid+1+x];
}
int i = 0;
int j = 0;
int k = l;
while(i < n1 && j < n2){
if(al[i] < ar[j]){
a[k] = al[i];
i++;
}
else{
a[k] = ar[j];
j++;
}
k++;
}
while(i < n1){
a[k] = al[i];
i++;
k++;
}
while(j < n2){
a[k] = ar[j];
j++;
k++;
}
}
void mergeSort(int a[], int l, int h){
if(l < h){
int mid = (l + h) / 2;
mergeSort(a, l, mid);
mergeSort(a, mid+1, h);
merge(a, l, mid, h);
}
}
int main()
{
cout << "Before Sorting" << endl;
int arr[10]{3, 6, 9, 13, 16, 18, 24, 23, 29, 33};
int arr1[10]{34, 46, 2, 18, 36, 12, 39, 27, 45, 69};
cout << endl;
cout << endl;
printArray(arr1, 10);
mergeSort(arr1, 0, 9);
cout << "After Sorting" << endl;
printArray(arr1, 10);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdm9pZCBwcmludEFycmF5KGludCBhcnJbXSwgaW50IG4pewogICAgaW50IGk7CiAgICBmb3IoaSA9IDA7IGkgPCBuOyBpKyspewogICAgICAgIGNvdXQgPDwgYXJyW2ldIDw8ICIgIjsKICAgIH0KICAgIGNvdXQgPDwgZW5kbDsKfQoKdm9pZCBsaW5lYXJTZWFyY2goaW50IGFbXSwgaW50IGtleSwgaW50IG4pewogICAgaW50IGk7CiAgICBmb3IoaSA9IDA7IGkgPCBuOyBpKyspewogICAgICAgIGlmKGFbaV0gPT0ga2V5KXsKICAgICAgICAgICAgY291dCA8PCAiIEZvdW5kIGF0OiAiIDw8IGkgPDwgIiB0aCBpbmRleCIgPDwgZW5kbDsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgICAgIGNvdXQgPDwgIk5vdCBGb3VuZCIgPDwgZW5kbDsKICAgIH0KfQoKdm9pZCBiaW5hcnlTZWFyY2goaW50IGFbXSwgaW50IGtleSwgaW50IG4pewogICAgaW50IGksIG1pZDsKICAgIGludCBoaWdoID0gbjsKICAgIGludCBsb3cgPSAwOwogICAgd2hpbGUobG93IDwgaGlnaCl7CiAgICAgICAgbWlkID0gKGxvdyArIGhpZ2gpIC8gMjsKICAgICAgICBpZihhW21pZF0gPT0ga2V5KXsKICAgICAgICAgICAgY291dCA8PCAiRm91bmQgYXQ6ICIgPDwgbWlkIDw8ICIgdGggaW5kZXgiIDw8IGVuZGw7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZihhW21pZF0gPCBrZXkpewogICAgICAgICAgICBsb3cgPSBtaWQgKyAxOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmKGFbbWlkXSA+IGtleSkKICAgICAgICAgICAgaGlnaCA9IG1pZCAtIDE7CiAgICAgICAgZWxzZQogICAgICAgICAgICBjb3V0IDw8ICJOb3QgZm91bmQiIDw8IGVuZGw7CiAgICB9Cn0KCnZvaWQgYnViYmxlU29ydChpbnQgYVtdLCBpbnQgbil7CiAgICBpbnQgaSwgajsKICAgIGludCB0ZW1wID0gMDsKICAgIGZvcihpID0gMDsgaSA8IG47IGkrKyl7CiAgICAgICAgZm9yKGogPSAwOyBqIDwgbiAtIGkgLSAxOyBqKyspewogICAgICAgICAgICBpZihhW2pdID4gYVtqKzFdKXsKICAgICAgICAgICAgICAgIHRlbXAgPSBhW2pdOwogICAgICAgICAgICAgICAgYVtqXSA9IGFbaisxXTsKICAgICAgICAgICAgICAgIGFbaisxXSA9IHRlbXA7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9Cn0KCnZvaWQgc2VsZWN0aW9uU29ydChpbnQgYVtdLCBpbnQgbil7CiAgICBpbnQgaSwgajsKICAgIGZvcihpID0gMDsgaSA8IG47IGkrKyl7CiAgICAgICAgaW50IG1pbkluZGV4ID0gaTsKICAgICAgICBmb3IoaiA9IGkgKyAxOyBqIDwgbjsgaisrKXsKICAgICAgICAgICAgaWYoYVttaW5JbmRleF0gPiBhW2pdKXsKICAgICAgICAgICAgICAgIG1pbkluZGV4ID0gajsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpbnQgdGVtcCA9IGFbaV07CiAgICAgICAgYVtpXSA9IGFbbWluSW5kZXhdOwogICAgICAgIGFbbWluSW5kZXhdID0gdGVtcDsKICAgICAgICBwcmludEFycmF5KGEsIG4pOwogICAgfQp9Cgp2b2lkIGluc2VydGlvblNvcnQoaW50IGFbXSwgaW50IG4pewogICAgaW50IGksIGosIGtleTsKICAgIGZvcihpID0gMTsgaSA8IG47IGkrKyl7CiAgICAgICAga2V5ID0gYVtpXTsKICAgICAgICBqID0gaSAtIDE7CiAgICAgICAgd2hpbGUoYVtqXSA+IGtleSAmJiBqID49IDApewogICAgICAgICAgICBhW2orMV0gPSBhW2pdOwogICAgICAgICAgICBqLS07CiAgICAgICAgfQogICAgICAgIGFbaisxXSA9IGtleTsKICAgICAgICBwcmludEFycmF5KGEsIG4pOwogICAgICAgIGNvdXQgPDwgZW5kbDsKICAgIH0KfQoKaW50IHF1aWNrUGFydGl0aW9uKGludCBhW10sIGludCBsb3csIGludCBoaWdoKXsKICAgIGludCBpLCBqLCBwaTsKICAgIHBpID0gaGlnaDsKICAgIGkgPSBsb3cgLSAxOwogICAgaW50IHRlbXA7CiAgICBmb3IoaiA9IGxvdzsgaiA8IGhpZ2g7IGorKyl7CiAgICAgICAgaWYoYVtqXSA8IGFbcGldKXsKICAgICAgICAgICAgaSsrOwogICAgICAgICAgICB0ZW1wID0gYVtpXTsKICAgICAgICAgICAgYVtpXSA9IGFbal07CiAgICAgICAgICAgIGFbal0gPSB0ZW1wOwogICAgICAgIH0KICAgICAgICBjb3V0IDw8ICJJbiBzaWRlIGxvb3AgajogIiA8PCBqIDw8ICIgdGggaXRlcmF0aW8iIDw8IGVuZGw7CiAgICAgICAgY291dCA8PCBlbmRsOwogICAgICAgIGNvdXQgPDwgZW5kbDsKICAgICAgICBwcmludEFycmF5KGEsIGhpZ2grMSk7CiAgICB9CiAgICB0ZW1wID0gYVtoaWdoXTsKICAgIGFbaGlnaF0gPSBhW2krMV07CiAgICBhW2krMV0gPSB0ZW1wOwogICAgY291dCA8PCAiYmVmb3JlIHJldHVybiAiIDw8IGkgPDwgIiB0aCBpdGVyYXRpbyIgPDwgZW5kbDsKICAgIGNvdXQgPDwgZW5kbDsKICAgIGNvdXQgPDwgZW5kbDsKICAgIHByaW50QXJyYXkoYSwgaGlnaCsxKTsKICAgIHJldHVybiBpICsgMTsKfQoKdm9pZCBxdWlja1NvcnQoaW50IGFbXSwgaW50IGxvdywgaW50IGhpZ2gpewogICAgaWYobG93IDwgaGlnaCl7CiAgICAgICAgaW50IHBpID0gcXVpY2tQYXJ0aXRpb24oYSwgbG93LCBoaWdoKTsKICAgICAgICBxdWlja1NvcnQoYSwgbG93LCBwaS0xKTsKICAgICAgICBxdWlja1NvcnQoYSwgcGkrMSwgaGlnaCk7CiAgICB9Cn0KCnZvaWQgbWVyZ2UoaW50IGFbXSwgaW50IGwsIGludCBtaWQsIGludCBoKXsKICAgIGludCBuMSA9IChtaWQgKyAxIC0gbCk7CiAgICBpbnQgbjIgPSAoaCAtIG1pZCk7CiAgICBpbnQgYWxbbjFdOwogICAgaW50IGFyW24yXTsKICAgIGludCB4LCB5OwogICAgZm9yKHggPSAwOyB4IDwgbjE7IHgrKyl7CiAgICAgICAgYWxbeF0gPSBhW2wreF07CiAgICB9CiAgICBmb3IoeCA9IDA7IHggPCBuMjsgeCsrKXsKICAgICAgICBhclt4XSA9IGFbbWlkKzEreF07CiAgICB9CiAgICBpbnQgaSA9IDA7CiAgICBpbnQgaiA9IDA7CiAgICBpbnQgayA9IGw7CiAgICB3aGlsZShpIDwgbjEgJiYgaiA8IG4yKXsKICAgICAgICBpZihhbFtpXSA8IGFyW2pdKXsKICAgICAgICAgICAgYVtrXSA9IGFsW2ldOwogICAgICAgICAgICBpKys7CiAgICAgICAgfQogICAgICAgIGVsc2V7CiAgICAgICAgICAgIGFba10gPSBhcltqXTsKICAgICAgICAgICAgaisrOwogICAgICAgIH0KICAgICAgICBrKys7CiAgICB9CiAgICB3aGlsZShpIDwgbjEpewogICAgICAgIGFba10gPSBhbFtpXTsKICAgICAgICBpKys7CiAgICAgICAgaysrOwogICAgfQogICAgd2hpbGUoaiA8IG4yKXsKICAgICAgICBhW2tdID0gYXJbal07CiAgICAgICAgaisrOwogICAgICAgIGsrKzsKICAgIH0KfQoKdm9pZCBtZXJnZVNvcnQoaW50IGFbXSwgaW50IGwsIGludCBoKXsKICAgIGlmKGwgPCBoKXsKICAgICAgICBpbnQgbWlkID0gKGwgKyBoKSAvIDI7CiAgICAgICAgbWVyZ2VTb3J0KGEsIGwsIG1pZCk7CiAgICAgICAgbWVyZ2VTb3J0KGEsIG1pZCsxLCBoKTsKICAgICAgICBtZXJnZShhLCBsLCBtaWQsIGgpOwogICAgfQp9CgppbnQgbWFpbigpCnsKICAgIGNvdXQgPDwgIkJlZm9yZSBTb3J0aW5nIiA8PCBlbmRsOwogICAgaW50IGFyclsxMF17MywgNiwgOSwgMTMsIDE2LCAxOCwgMjQsIDIzLCAyOSwgMzN9OwogICAgaW50IGFycjFbMTBdezM0LCA0NiwgMiwgMTgsIDM2LCAxMiwgMzksIDI3LCA0NSwgNjl9OwogICAgY291dCA8PCBlbmRsOwogICAgY291dCA8PCBlbmRsOwogICAgcHJpbnRBcnJheShhcnIxLCAxMCk7CiAgICBtZXJnZVNvcnQoYXJyMSwgMCwgOSk7CiAgICBjb3V0IDw8ICJBZnRlciBTb3J0aW5nIiA8PCBlbmRsOwogICAgcHJpbnRBcnJheShhcnIxLCAxMCk7CiAgICByZXR1cm4gMDsKfQ==