Professional Documents
Culture Documents
Ans)
Merge Sort
#include<stdio.h>
void mergesort(int *a,int first,int last);
merge(a,first,mid,last);
}
}
void merge(int *a,int first,int mid,int last)
{
int pos = 0,i = first,j = mid+1;
int temp[last-first+1];
while( i <= mid && j <= last )
{
if( a[i] > a[j] )
temp[pos++] = a[j++];
else
temp[pos++] = a[i++];
}
while(i <= mid)
temp[pos++] = a[i++];
while(j <= last)
temp[pos++] = a[j++];
for( i = 0 ; i < pos ; i++ )
a[i+first] = temp[i];
}
Quick Sort
#include<stdio.h>
int Partition(int *A,int low,int high)
{
int pivot = A[low],j = low,i;
for(i=low+1;i<=high;i++)
{
if(A[i] <= pivot)
{
j++;
Swap(&A[i],&A[j]);
}
}
Swap(&A[j],&A[low]);
return j;
}
int main(void)
{
int N,i;
printf("Enter the number of elements : ");
scanf("%d",&N);
int A[N+1];
printf("Enter the numbers : ");
for(i=0;i<N;i++)
scanf("%d",&A[i]);
QuickSort(A,0,N-1);
for(i=0;i<N;i++)
printf("%d ",A[i]);
return 0;}
struct node
{
float coef;
int expo;
printf("Polynomial 1 is : ");
display(start1);
printf("Polynomial 2 is : ");
display(start2);
printf("\n1.Addition of polynomial\n2.Subtaction of polynomial\n3.Mutiplication of
polynomial\n4.Exit");
scanf("%d",&ch);
while(1)
{
switch(ch)
{
case 1:
poly_add(start1, start2);
break;
case 2:
poly_mult(start1, start2);
break;
case 3:
exit(0);
default:
printf("\nPlease try again");
}
printf("\n1.Addition of polynomial\n2.Mutiplication of polynomial\n3.Exit");
scanf("%d",&ch);
}
return 0;
}/*End of main()*/
ptr=start;
while(ptr->link!=NULL && ptr->link->expo >= ex)
ptr=ptr->link;
tmp->link=ptr->link;
ptr->link=tmp;
}
return start;
}/*End of insert()*/
{
ptr=start;
while(ptr->link!=NULL)
ptr=ptr->link;
tmp->link=ptr->link;
ptr->link=tmp;
}
return start;
}/*End of insert()*/
start3=NULL;
}
/*if poly1 has finished and elements left in poly2*/
while(p2!=NULL)
{
start3=insert(start3,p2->coef,p2->expo);
p2=p2->link;
}
printf("Added polynomial is : ");
display(start3);
}/*End of poly_add() */
start3=insert_s(start3,p1->coef*p2->coef,p1->expo+p2->expo);
p2=p2->link;
}
p1=p1->link;
}
printf("Multiplied polynomial is : ");
display(start3);
}/*End of poly_mult()*/
int main(void)
{
char a[100],b[100];
int n,m,i,j;
printf("Enter two strings : ");
scanf("%s %s",a,b);
n = strlen(a);
m = strlen(b);
int L[n+1][m+1];
for(i=0;i<=n;i++)
L[i][0] = 0;
for(j=0;j<=m;j++)
L[0][j] = 0;
for(i=1;i<=n;i++)
for(j=1;j<m;j++)
{
if(a[i-1] == b[j-1])
L[i][j] = L[i-1][j-1] + 1;
else
L[i][j] = max(L[i-1][j],L[i][j-1]);
}
printf("Length : %d",L[n][m]);
return 0;
}
};
typedef node node;
class nodeCompare {
public:
bool operator() (node *a, node *b)
{
return (a->freq > b->freq);
}
};
//print heap and codes
void print_heap(node *head, std::string path)
{
if(!head)
return;
if(head->character !=SENTINAL)
cout<< head->character << " code is " << path<<"\n";
print_heap(head->left, path+"0");
print_heap(head->right, path+"1");
}
int main()
{
//new queue
std::priority_queue<node *, vector<node *>, nodeCompare> minHeap;
minHeap.pop();
//merge both
node * new_node= new node(SENTINAL, min1->freq + min2->freq);
new_node->left= min1;
new_node->right= min2;
//push back in minHeap
minHeap.push(new_node);
}
print_heap(minHeap.top(), std::string(""));
return 0;
}
{
for (int i = 0 ; i < len2 - len1 ; i++)
str1 = '0' + str1;
return len2;
}
else if (len1 > len2)
{
for (int i = 0 ; i < len1 - len2 ; i++)
str2 = '0' + str2;
}
return len1; // If len1 >= len2
}
string addBitStrings( string first, string second )
{
string result;
int length = makeEqualLength(first, second);
int carry = 0;
int fh = n/2;
int sh = (n-fh);
string Xl = X.substr(0, fh);
string Xr = X.substr(fh, sh);
string Yl = Y.substr(0, fh);
string Yr = Y.substr(fh, sh);
long int P1 = multiply(Xl, Yl);
long int P2 = multiply(Xr, Yr);
long int P3 = multiply(addBitStrings(Xl, Xr), addBitStrings(Yl, Yr));
return P1*(1<<(2*sh)) + (P3 - P1 - P2)*(1<<sh) + P2;
}
int main(void)
{
int num1,num2;
scanf("%d %d",&num1,&num2);
string S1,S2;
S1 = bitset<32>(num1).to_string();
S2 = bitset<32>(num2).to_string();
printf("%ld\n",multiply(S1,S2));
return 0;
}
// set A[a] = k
void set(mat A, corners a, datatype k)
{
int i, j;
for (i = a.ra; i < a.rb; i++)
for (j = a.ca; j < a.cb; j++)
A[i][j] = k;
}
// Print A[a]
void print(mat A, corners a, char *name)
{
int i, j;
if (j == 0)
b->cb = cm; // left cols
else
b->ca = cm; // right cols
}
if (n == 1)
{
C[c.ra][c.ca] += A[a.ra][a.ca] * B[b.ra][b.ca];
return;
p.ra = p.ca = 0;
p.rb = p.cb = m / 2;
// P0 + P3 - P4 + P6 = S - P4 + P6 = T + P6 = C00
add(P[0], P[3], S, p, p, p);
sub(S, P[4], T, p, p, p);
add(T, P[6], C, p, p, cii[0][0]);
// P2 + P4 = C01
add(P[2], P[4], C, p, p, cii[0][1]);
// P1 + P3 = C10
add(P[1], P[3], C, p, p, cii[1][0]);
// P0 + P2 - P1 + P5 = S - P1 + P5 = T + P5 = C11
add(P[0], P[2], S, p, p, p);
sub(S, P[1], T, p, p, p);
add(T, P[5], C, p, p, cii[1][1]);
}
int main()
{
mat A, B, C;
corners ai = { 0, N, 0, N };
corners bi = { 0, N, 0, N };
corners ci = { 0, N, 0, N };
// identity(A,bi); identity(B,bi);
// set(A,ai,2); set(B,bi,2);
randk(A, ai, 0, 2);
randk(B, bi, 0, 2);
print(A, ai, "A");
print(B, bi, "B");
set(C, ci, 0);
// add(A,B,C, ai, bi, ci);
mul(A, B, C, ai, bi, ci);
print(C, ci, "C");
return 0;
}
//V[i] = 1;
while(!Q.empty())
{
int j = Q.front();
printf("%d ",j);
V[j] = 1;
Q.pop();
struct AL *temp = G[j];
while(temp)
{
if(!V[temp->data])
{
Q.push(temp->data);
// V[temp->data] = 1;
}
temp = temp->next;
}
}
}
int main(void)
{
vector<struct AL *> Graph;
int v = 4,i;
for(int i=0;i<v;i++)
Graph.push_back(NULL);
addEdge(Graph, 0, 1);
addEdge(Graph, 0, 2);
addEdge(Graph, 1, 2);
addEdge(Graph, 2, 0);
addEdge(Graph, 2, 3);
addEdge(Graph, 3, 3);
dfs(Graph,0);
memset(V,0,sizeof(V));
bfs(Graph,0);
return 0;
PQ.push(make_pair(temp->data,distance[temp->data]));
temp = temp->next;
}
}
for(i=0;i<N;i++)
printf("%d ",distance[i]);
}
int main(void)
{
vector<struct AL *> Graph;
int v = 5,i;
for(int i=0;i<v;i++)
Graph.push_back(NULL);
addEdge(Graph, 0, 1,10);
addEdge(Graph, 0, 2,3);
addEdge(Graph, 1, 2,1);
addEdge(Graph, 2, 1,4);
addEdge(Graph, 2, 3,8);
addEdge(Graph, 1, 3,2);
addEdge(Graph, 2, 4,2);
addEdge(Graph, 3, 4,7);
addEdge(Graph, 4, 3,9);
dijkstra(Graph,0,v);
return 0;
}
}
void BellmanFord(vector<struct AL *> G,int start,int N)
{
int dist[N+1];
for(int i=0;i<N;i++)
dist[i] = INT_MAX;
dist[start] = 0;
for(int i=0;i<N-1;i++)
{
for(int j=0;j<N;j++)
{
struct AL *temp = G[j];
while(temp)
{
if(dist[j] != INT_MAX && (dist[temp->data] > dist[j] +
temp->weight))
dist[temp->data] = dist[j] + temp->weight;
temp = temp->next;
}
}
}
printf("Vertex Distance\n");
for(int i=0;i<N;i++)
{
printf("%d\t%2d\n",i,dist[i]);
}
}
int main(void)
{
vector<struct AL *> Graph;
int v = 5;
for(int i=0;i<v;i++)
Graph.push_back(NULL);
addEdge(Graph, 0, 1,-1);
addEdge(Graph, 0, 2,4);
addEdge(Graph, 1, 2,3);
addEdge(Graph, 1, 3,2);
addEdge(Graph, 1, 4,2);
addEdge(Graph, 3, 1,1);
addEdge(Graph, 3, 2,5);
addEdge(Graph, 4, 3,-3);
BellmanFord(Graph,0,v);
return 0;
}
for(i=1;i<len;)
{
if(P[i] == P[j])
F[i++] = ++j;
else if(j > 0)
j = F[j-1];
else
F[i++] = 0;
}
}
int KMP(char *T,char *P,int N,int M)
{
PrefixTable(P,M);
int i,j=0;
for(i=0;i<N;)
{
if(T[i] == P[j])
{
if(j == M-1)
return (i-j);
else
i++,j++;
}
else if(j > 0)
j = F[j-1];
else
i++;
}
return -1;
}
int main(void)
{
char T[1000],P[100];
int flag = 0;
printf("Enter the text : ");
scanf("%s",T);
printf("Enter the pattern : ");
scanf("%s",P);
int k = KMP(T,P,strlen(T),strlen(P));
if(k == -1)
printf("Pattern not found\n");
else
printf("Pattern found at index %d\n",k+1);
return 0;
}
#include<math.h>
#include<string.h>
long int p,q,n,t,flag,e[100],d[100],temp[100],j,m[100],en[100],i;
char msg[100];
int prime(long int);
void ce();
long int cd(long int);
void encrypt();
void decrypt();
void main()
{
printf("\nENTER FIRST PRIME NUMBER\n");
scanf("%d",&p);
flag=prime(p);
if(flag==0)
{
printf("\nWRONG INPUT\n");
getch();
exit(1);
}
printf("\nENTER ANOTHER PRIME NUMBER\n");
scanf("%d",&q);
flag=prime(q);
if(flag==0||p==q)
{
printf("\nWRONG INPUT\n");
getch();
exit(1);
}
printf("\nENTER MESSAGE\n");
fflush(stdin);
scanf("%s",msg);
for(i=0;msg[i]!=NULL;i++)
m[i]=msg[i];
n=p*q;
t=(p-1)*(q-1);
ce();
encrypt();
decrypt();
getch();
}
int prime(long int pr)
{
int i;
j=sqrt(pr);
for(i=2;i<=j;i++)
{
if(pr%i==0)
return 0;
}
return 1;
}
void ce()
{
int k;
k=0;
for(i=2;i<t;i++)
{
if(t%i==0)
continue;
flag=prime(i);
if(flag==1&&i!=p&&i!=q)
{
e[k]=i;
flag=cd(e[k]);
if(flag>0)
{
d[k]=flag;
k++;
}
if(k==99)
break;
}
}
}
long int cd(long int x)
{
i++;
}
en[i]=-1;
printf("\nTHE ENCRYPTED MESSAGE IS\n");
for(i=0;en[i]!=-1;i++)
printf("%c",en[i]);
}
void decrypt()
{
long int pt,ct,key=d[0],k;
i=0;
while(en[i]!=-1)
{
ct=temp[i];
k=1;
for(j=0;j<key;j++)
{
k=k*ct;
k=k%n;
}
pt=k+96;
m[i]=pt;
i++;
}
m[i]=-1;
printf("\nTHE DECRYPTED MESSAGE IS\n");
for(i=0;m[i]!=-1;i++)
printf("%c",m[i]);
}