#include <iostream>
using namespace std;
struct Array
{
int *A;
int size;
int length;
};
void Display(struct Array arr2)
{
for (int i = 0; i < arr2.length; i++)
cout << arr2.A[i];
}
int main()
{
struct Array arr;
arr.size = 10;
arr.A = new int[arr.size];
arr.length = 4;
for (int i = 0; i < arr.length; i++)
{
cin >> arr.A[i];
}
Display(arr);
return 0;
}
#include <iostream>
using namespace std;
struct Array
{
int A[10];
int size;
int length;
};
void Display (struct Array arr)
{
for (int i=0; i<arr.length; i++)
printf("%d ", arr.A[i]);
}
void Append(struct Array *arr, int x)
{
if (arr->size > arr->length)
arr->A[arr->length++] = x;
}
void Insert(struct Array *arr, int index, int x)
{
if (index < arr->length && index >=0)
{
for(int i = arr->length; i>index; i--)
arr->A[i] = arr->A[i-1];
arr->A[index] = x;
arr->length++;
}
}
int main()
{
struct Array arr1 = {{2, 3, 4, 5, 6}, 10, 5};
Append(&arr1, 10);
Insert(&arr1, 0, 12);
Display(arr1);
return 0;
}
#include <iostream>
using namespace std;
struct Array
{
int A[10];
int size;
int length;
};
void Display(struct Array arr)
{
for (int i = 0; i < arr.length; i++)
printf("%d ", arr.A[i]);
cout << endl;
}
void Append(struct Array *arr, int x)
{
if (arr->size > arr->length)
arr->A[arr->length++] = x;
}
void Insert(struct Array *arr, int index, int x)
{
if (index < arr->length && index >= 0)
{
for (int i = arr->length; i > index; i--)
arr->A[i] = arr->A[i - 1];
arr->A[index] = x;
arr->length++;
}
}
void Delete(struct Array *arr, int index)
{
if (index < arr->length && index >= 0)
{
for (int i =index; i < arr->length -1; i++)
arr->A[i]=arr->A[i+1];
arr->length--;
}
}
int main()
{
struct Array arr1 = {{2, 3, 4, 5, 6}, 10, 5};
Append(&arr1, 10);
Insert(&arr1, 0, 12);
Display(arr1);
Delete(&arr1, 1);
Display(arr1);
return 0;
}
1. Transposition Method of Linear Searching :
Basically Jo item search me find ho jayega usko ham ek position pehle khiska denge. Therefore jo item ham "baar baar" search karege wo array me upar aa jayega and jaldi catch ho jayega.
#include <iostream>
using namespace std;
struct Array
{
int A[10];
int size;
int length;
};
void Display(struct Array arr)
{
for (int i = 0; i < arr.length; i++)
printf("%d ", arr.A[i]);
cout << endl;
}
int Search(struct Array *arr, int x)
{
for(int i =0; i<arr->length; i++)
{
if (x == arr->A[i])
{
swap(arr->A[i], arr->A[i-1]);
return i-1;
}
}
return -1;
}
int main()
{
struct Array arr1 = {{2, 3, 4, 5, 6}, 10, 5};
cout << Search(&arr1, 4) << endl;
Display(arr1);
return 0;
}
2. Move to Head / Front Method of Linear Searching :
Found element ko 0th index (yaani sabse aage) pe bhej denge.
Here found item to first position pe aa jayega but we wouldn't know where the element at 0th index will be thrown to. Which is a draw back.
Sorted Array hona zaruri hai bhai.
Using Loop:
#include <iostream>
using namespace std;
struct Array
{
int A[10];
int size;
int length;
};
void Display(struct Array arr)
{
for (int i = 0; i < arr.length; i++)
printf("%d ", arr.A[i]);
cout << endl;
}
int binarySearch(struct Array arr, int key)
{
int l = 0;
int h = arr.length - 1;
int mid;
while (l <= h)
{
mid = (l + h) / 2;
if (key == arr.A[mid])
return mid;
else if (key < arr.A[mid])
h = mid - 1;
else
l = mid + 1;
}
return -1;
}
int main()
{
struct Array arr1 = {{1, 2, 3, 4, 5, 6, 7, 8, 9}, 10, 9};
cout << binarySearch(arr1, 4) << endl;
Display(arr1);
return 0;
}
Using Recursion :
to get an element at an index in an array
to set an element at a given index in an array
Same concept as Max().
Recursive Approach :
Ek array se dusre array me copy kardo ulta karke and then copy elements of 2nd array back to the first array.
Swap kardo elements ko :
#include<iostream>
using namespace std;
void reverse(int arr[], int n)
{
int temp;
for (int i=0, j=n-1; i < j; i++, j--)
{
temp = arr[i];
arr[i] = arr[j];
arr[j]=temp;
}
}
int main()
{
int a[]={1,2,3,4,5};
reverse(a, 5);
for (int i = 0; i<5; i++)
cout << a[i];
return 0;
}
Left side shift kardo (we'll lose the first element tho), last me zero aa jayega.
Jo element delete/lose hua hai usko laast me daal dege.
#include<iostream>
using namespace std;
struct Array
{
int A[10];
int size;
int length;
};
void Display(struct Array arr)
{
for ( int i =0; i< arr.length; i++)
printf("%d ", arr.A[i]);
}
void insertSorted(struct Array *arr, int x)
{
int i = arr->length-1;
while (x < arr->A[i])
{
arr->A[i+1] = arr->A[i];
i--;
}
arr->A[i+1] = x;
arr->length++;
}
int main()
{
struct Array arr1 = {{1,2,3,4,5,7,8}, 10, 7};
insertSorted(&arr1, 6);
Display(arr1);
return 0;
}
#include<iostream>
using namespace std;
struct Array
{
int A[10];
int size;
int length;
};
void Display(struct Array arr)
{
for ( int i =0; i< arr.length; i++)
printf("%d ", arr.A[i]);
}
int isSorted(struct Array arr)
{
for (int i = 0; i< arr.length-1; i++)
{
if (arr.A[i] > arr.A[i+1])
return 0; //false
}
return 1; // true i.e sorted hai array
}
int main()
{
struct Array arr1 = {{1,2,3,4,5,6,7}, 10, 7};
cout << isSorted(arr1);
Display(arr1);
return 0;
}
#include<iostream>
using namespace std;
struct Array
{
int A[10];
int size;
int length;
};
void Display(struct Array arr)
{
for ( int i =0; i< arr.length; i++)
printf("%d ", arr.A[i]);
}
void rearrange(struct Array *arr)
{
int i=0, j=arr->length-1;
while (i<j)
{
while(arr->A[i]<0) {i++;}
while(arr->A[j]>=0) {j--;}
if(i<j)
{
swap(arr->A[i], arr->A[j]);
}
}
}
int main()
{
struct Array arr1 = {{-1,2,-3,4,5,-7,8}, 10, 7};
rearrange(&arr1);
Display(arr1);
return 0;
}
Merging can only be done when both arrays are sorted and we NEED a 3rd array as well.
#include <iostream>
using namespace std;
struct Array
{
int A[10];
int size;
int length;
};
void Display(struct Array arr)
{
for (int i = 0; i < arr.length; i++)
printf("%d ", arr.A[i]);
}
struct Array *merge(struct Array *arr1, struct Array *arr2)
{
int i, j, k;
i = j = k = 0;
// creating a struct in heap
struct Array *arr3 = new struct Array;
//or
// struct Array *arr3 = (struct Array *)malloc(sizeof(struct Array));
while (i < arr1->length && j < arr2->length)
{
if (arr1->A[i] < arr2->A[j])
arr3->A[k++] = arr1->A[i++];
else
arr3->A[k++] = arr2->A[j++];
}
for (; i < arr1->length; i++)
arr3->A[k++] = arr1->A[i];
for (; j < arr2->length; j++)
arr3->A[k++] = arr2->A[j];
arr3->length = arr1->length + arr2->length;
arr3->size = 10;
return arr3;
}
int main()
{
struct Array arr1 = {{2, 6, 10, 15, 25}, 10, 5};
struct Array arr2 = {{3, 4, 7, 18, 20}, 10, 5};
struct Array *arr3;
arr3 = merge(&arr1, &arr2);
Display(*arr3);
return 0;
}
Unsorted vs Sorted List :
We'll check if an element in the 1st array is present in the 2nd array then copy that element to the third array.
Unsorted vs Sorted :
/* ------------------ for sorted array ------------------ */
#include <iostream>
using namespace std;
struct Array
{
int A[10];
int size;
int length;
};
void Display(struct Array arr)
{
for (int i = 0; i < arr.length; i++)
printf("%d ", arr.A[i]);
printf("\n");
}
struct Array *Union (struct Array *arr1, struct Array *arr2)
{
int i,j,k;
i=j=k=0;
struct Array *arrX = new struct Array;
while(i<arr1->length && j <arr2->length)
{
if (arr1->A[i] < arr2->A[j])
arrX->A[k++] = arr1->A[i++];
else if (arr1->A[i] > arr2->A[j])
arrX->A[k++] = arr2->A[j++];
else
{
arrX->A[k++] = arr1->A[i++];
j++;
}
}
for(; i<arr1->length ; i++)
arrX->A[k++] = arr1->A[i];
for(; j<arr2->length; j++)
arrX->A[k++] = arr2->A[j];
arrX->length = k;
arrX->size = 10;
return arrX;
}
struct Array * Intersection (struct Array *arr1, struct Array *arr2)
{
struct Array *arrX = new struct Array;
int i,j,k;
i=j=k=0;
while (i<arr1->length && j < arr2->length)
{
if(arr1->A[i] < arr2->A[j])
i++;
else if (arr1->A[i] > arr2->A[j])
j++;
else if (arr1->A[i] == arr2->A[j])
{
arrX->A[k++] = arr2->A[i++];
j++;
}
}
arrX->length = k;
arrX->size = 10;
return arrX;
}
struct Array * Difference (struct Array *arr1, struct Array *arr2)
{
int i,j,k;
i=j=k=0;
struct Array * arrX = new struct Array;
while (i < arr1->length && j < arr2->length)
{
if ( arr1->A[i] < arr2->A[j])
arrX->A[k++] = arr1->A[i++];
else if (arr1->A[i] > arr2->A[j])
j++;
else
{
i++;
j++;
}
}
for (; i<arr1->length; i++)
arrX->A[k++] = arr1->A[i];
arrX->length = k;
arrX->size = 10;
return arrX;
}
int main()
{
struct Array arr1 = {{2, 9, 21, 28, 35}, 10, 5};
struct Array arr2 = {{2, 3, 9, 18, 28}, 10, 5};
struct Array *arr3;
arr3 = Union(&arr1, &arr2);
Display(*arr3);
arr3 = Intersection(&arr1, &arr2);
Display(*arr3);
arr3 = Difference(&arr1, &arr2);
Display(*arr3);
}
#include <stdio.h>
#include <stdlib.h>
struct Array
{
int *A;
int size;
int length;
};
void Display(struct Array arr)
{
int i;
printf("\nElements are\n");
for (i = 0; i < arr.length; i++)
printf("%d ", arr.A[i]);
}
void Append(struct Array *arr, int x)
{
if (arr->length < arr->size)
arr->A[arr->length++] = x;
}
void Insert(struct Array *arr, int index, int x)
{
int i;
if (index >= 0 && index <= arr->length)
{
for (i = arr->length; i > index; i--)
arr->A[i] = arr->A[i - 1];
arr->A[index] = x;
arr->length++;
}
}
int Delete(struct Array *arr, int index)
{
int x = 0;
int i;
if (index >= 0 && index < arr->length)
{
x = arr->A[index];
for (i = index; i < arr->length - 1; i++)
arr->A[i] = arr->A[i + 1];
arr->length--;
return x;
}
return 0;
}
void swap(int *x, int *y)
{
int temp;
temp = *x;
*x = *y;
*y = temp;
}
int LinearSearch(struct Array *arr, int key)
{
int i;
for (i = 0; i < arr->length; i++)
{
if (key == arr->A[i])
{
swap(&arr->A[i], &arr->A[0]);
return i;
}
}
return -1;
}
int BinarySearch(struct Array arr, int key)
{
int l, mid, h;
l = 0;
h = arr.length - 1;
while (l <= h)
{
mid = (l + h) / 2;
if (key == arr.A[mid])
return mid;
else if (key < arr.A[mid])
h = mid - 1;
else
l = mid + 1;
}
return -1;
}
int RBinSearch(int a[], int l, int h, int key)
{
int mid;
if (l <= h)
{
mid = (l + h) / 2;
if (key == a[mid])
return mid;
else if (key < a[mid])
return RBinSearch(a, l, mid - 1, key);
else
return RBinSearch(a, mid + 1, h, key);
}
return -1;
}
int Get(struct Array arr, int index)
{
if (index >= 0 && index < arr.length)
return arr.A[index];
return -1;
}
void Set(struct Array *arr, int index, int x)
{
if (index >= 0 && index < arr->length)
arr->A[index] = x;
}
int Max(struct Array arr)
{
int max = arr.A[0];
int i;
for (i = 1; i < arr.length; i++)
{
if (arr.A[i] > max)
max = arr.A[i];
}
return max;
}
int Min(struct Array arr)
{
int min = arr.A[0];
int i;
for (i = 1; i < arr.length; i++)
{
if (arr.A[i] < min)
min = arr.A[i];
}
return min;
}
int Sum(struct Array arr)
{
int s = 0;
int i;
for (i = 0; i < arr.length; i++)
s += arr.A[i];
return s;
}
float Avg(struct Array arr)
{
return (float)Sum(arr) / arr.length;
}
void Reverse(struct Array *arr)
{
int *B;
int i, j;
B = (int *)malloc(arr->length * sizeof(int));
for (i = arr->length - 1, j = 0; i >= 0; i--, j++)
B[j] = arr->A[i];
for (i = 0; i < arr->length; i++)
arr->A[i] = B[i];
}
void Reverse2(struct Array *arr)
{
int i, j;
for (i = 0, j = arr->length - 1; i < j; i++, j--)
{
swap(&arr->A[i], &arr->A[j]);
}
}
void InsertSort(struct Array *arr, int x)
{
int i = arr->length - 1;
if (arr->length == arr->size)
return;
while (i >= 0 && arr->A[i] > x)
{
arr->A[i + 1] = arr->A[i];
i--;
}
arr->A[i + 1] = x;
arr->length++;
}
int isSorted(struct Array arr)
{
int i;
for (i = 0; i < arr.length - 1; i++)
{
if (arr.A[i] > arr.A[i + 1])
return 0;
}
return 1;
}
void Rearrange(struct Array *arr)
{
int i, j;
i = 0;
j = arr->length - 1;
while (i < j)
{
while (arr->A[i] < 0)
i++;
while (arr->A[j] >= 0)
j--;
if (i < j)
swap(&arr->A[i], &arr->A[j]);
}
}
struct Array *Merge(struct Array *arr1, struct Array
*arr2)
{
int i, j, k;
i = j = k = 0;
struct Array *arr3 = (struct Array
*)malloc(sizeof(struct Array));
while (i < arr1->length && j < arr2->length)
{
if (arr1->A[i] < arr2->A[j])
arr3->A[k++] = arr1->A[i++];
else
arr3->A[k++] = arr2->A[j++];
}
for (; i < arr1->length; i++)
arr3->A[k++] = arr1->A[i];
for (; j < arr2->length; j++)
arr3->A[k++] = arr2->A[j];
arr3->length = arr1->length + arr2->length;
arr3->size = 10;
return arr3;
}
struct Array *Union(struct Array *arr1, struct Array
*arr2)
{
int i, j, k;
i = j = k = 0;
struct Array *arr3 = (struct Array
*)malloc(sizeof(struct Array));
while (i < arr1->length && j < arr2->length)
{
if (arr1->A[i] < arr2->A[j])
arr3->A[k++] = arr1->A[i++];
else if (arr2->A[j] < arr1->A[i])
arr3->A[k++] = arr2->A[j++];
else
{
arr3->A[k++] = arr1->A[i++];
j++;
}
}
for (; i < arr1->length; i++)
arr3->A[k++] = arr1->A[i];
for (; j < arr2->length; j++)
arr3->A[k++] = arr2->A[j];
arr3->length = k;
arr3->size = 10;
return arr3;
}
struct Array *Intersection(struct Array *arr1, struct
Array *arr2)
{
int i, j, k;
i = j = k = 0;
struct Array *arr3 = (struct Array
*)malloc(sizeof(struct Array));
while (i < arr1->length && j < arr2->length)
{
if (arr1->A[i] < arr2->A[j])
i++;
else if (arr2->A[j] < arr1->A[i])
j++;
else if (arr1->A[i] == arr2->A[j])
{
arr3->A[k++] = arr1->A[i++];
j++;
}
}
arr3->length = k;
arr3->size = 10;
return arr3;
}
struct Array *Difference(struct Array *arr1, struct
Array *arr2)
{
int i, j, k;
i = j = k = 0;
struct Array *arr3 = (struct Array
*)malloc(sizeof(struct Array));
while (i < arr1->length && j < arr2->length)
{
if (arr1->A[i] < arr2->A[j])
arr3->A[k++] = arr1->A[i++];
else if (arr2->A[j] < arr1->A[i])
j++;
else
{
i++;
j++;
}
}
for (; i < arr1->length; i++)
arr3->A[k++] = arr1->A[i];
arr3->length = k;
arr3->size = 10;
return arr3;
}
int main()
{
struct Array arr1;
int ch;
int x, index;
printf("Enter Size of Array");
scanf("%d", &arr1.size);
arr1.A = (int *)malloc(arr1.size * sizeof(int));
arr1.length = 0;
do
{
printf("\n\nMenu\n");
printf("1. Insert\n");
printf("2. Delete\n");
printf("3. Search\n");
printf("4. Sum\n");
printf("5. Display\n");
printf("6.Exit\n");
printf("enter you choice ");
scanf("%d", &ch);
switch (ch)
{
case 1: printf("Enter an element and index");
scanf("%d%d",&x,&index);
Insert(&arr1,index,x);
break;
case 2: printf("Enter index ");
scanf("%d",&index);
x=Delete(&arr1,index);
printf("Deleted Element is %d\n",x);
break;
case 3:printf("Enter element to search ");
scanf("%d",&x);
index=LinearSearch(&arr1,x);
printf("Element index %d",index);
break;
case 4:printf("Sum is %d\n",Sum(arr1));
break;
case 5:Display(arr1);
}
} while (ch < 6);
return 0;
}
skipped
'
n = 12
What to do for each element?
First element is three.
Go to index three and increment it.
Make it as one.
So it was zero, just make it as one.
Then next, seven, go to index seven and make it as one.
Increment it.
Four, go to index and then increment it.
Nine, go to index nine and increment it.
Go to index 12 and increment it.
and so on...
This is a faster method.
This is a simple implementation of Hash Table.
In the previous method the time complexity was O(n2) whereas here it is only O(n).
#include<iostream>
using namespace std;
void Duplicate (int arr[], int length)
{
int lastDuplicate=0;
for (int i=0; i< length;i++)
{
if (arr[i] == arr[i+1] && arr[i]!=lastDuplicate)
{
printf("%d ", arr[i]);
lastDuplicate = arr[i];
}
}
}
int main()
{
int arr[] = {3,6,8,8,10,12,15,15,15,20};
int length = 10;
Duplicate(arr, length);
return 0;
}
#include<iostream>
using namespace std;
void countDuplicate (int arr[], int length)
{
int j;
for(int i=0; i<length-1; i++)
{
if(arr[i] == arr[i+1])
{
j=i+1;
while(arr[j]==arr[i]) {j++;}
printf("%d : %d times\n", arr[i], j-i);
i=j-1;
}
}
}
int main()
{
int arr[] = {3,6,8,8,10,12,15,15,15,20};
int length = 10;
countDuplicate(arr, length);
return 0;
}
#include<iostream>
using namespace std;
void countDuplicateHash (int arr[], int length, int largest)
{
int h[largest+1] ={0};
for (int i=0; i<length; i++)
{
h[arr[i]]++;
}
for (int i=0;i<largest+1;i++)
{
if(h[i] > 1)
{
printf("%d : %d times\n", i, h[i]);
}
}
}
int main()
{
int arr[] = {3,6,8,8,10,12,15,15,15,20};
int length = 10;
countDuplicateHash(arr, length, 20);
return 0;
}
#include<iostream>
using namespace std;
void countNum(int arr[], int length)
{
int count;
for (int i=0; i<length; i++)
{
count = 1;
if(arr[i] != -1)
{
for (int j=i+1; j<length; j++)
{
if (arr[i] == arr[j])
{
count++;
arr[j] = -1;
}
}
if (count > 1) printf("%d : %d times\n", arr[i], count);
}
}
}
int main()
{
int arr[] = {8,3,6,4,6,5,6,8,2,7};
int length = 10;
countNum(arr, length);
return 0;
}
#include <iostream>
using namespace std;
void countDuplicateHash(int arr[], int length, int largest)
{
int h[largest + 1] = {0};
for (int i = 0; i < length; i++)
{
h[arr[i]]++;
}
for (int i = 0; i < largest + 1; i++)
{
if (h[i] > 1)
{
printf("%d : %d times\n", i, h[i]);
}
}
}
int main()
{
int arr[] = {3, 6, 8, 8, 10, 12, 15, 15, 20, 20};
int length = 10;
countDuplicateHash(arr, length, 20);
return 0;
}