Maximum and Minimum Using Divide and Conquer in C
Maximum and Minimum Using Divide and Conquer in C
in c
code in C:
#include<stdio.h>
#include<stdio.h>
int max, min;
int a[100];
void maxmin(int i, int j)
{
int max1, min1, mid;
if(i==j)
{
max = min = a[i];
}
else
{
if(i == j-1)
{
if(a[i] <a[j])
{
max = a[j];
min = a[i];
}
else
{
max = a[i];
min = a[j];
}
}
else
{
mid = (i+j)/2;
maxmin(i, mid);
max1 = max; min1 = min;
maxmin(mid+1, j);
if(max <max1)
max = max1;
if(min > min1)
min = min1;
}
}
}
int main ()
{
int i, num;
printf ("\nEnter the total number of numbers : ");
scanf ("%d",&num);
printf ("Enter the numbers : \n");
for (i=1;i<=num;i++)
scanf ("%d",&a[i]);
max = a[0];
min = a[0];
maxmin(1, num);
printf ("Minimum element in an array : %d\n", min);
printf ("Maximum element in an array : %d\n", max);
return 0;
}
output:-
Enter the total number of numbers : 5
Enter the numbers :
29
21
64
27
20
Minimum element in an array : 20
Maximum element in an array : 64
--------------------------------
Algorithm
Solution:
#include<stdio.h>
int a[10][10],n,visit[10];
int cost_opt=0,cost_apr=0;
int least_apr(int c);
int least_opt(int c);
void mincost_opt(int city)
int i,ncity;
visit[city]=1;
printf("%d-->",city);
ncity=least_opt(city);
if(ncity==999)
{
ncity=1;
printf("%d",ncity);
cost_opt+=a[city][ncity];
return;
}
mincost_opt(ncity);
void mincost_apr(int city)
{
int i,ncity;
visit[city]=1;
printf("%d-->",city);
ncity=least_apr(city);
if(ncity==999)
{
ncity=1;
printf("%d",ncity);
cost_apr+=a[city][ncity];
return;
}
mincost_apr(ncity);
int least_opt(int c)
int i,nc=999;
int min=999,kmin=999;
for(i=1;i<=n;i++)
{
if((a[c][i]!=0)&&(visit[i]==0))
if(a[c][i]<min)
{
min=a[i][1]+a[c][i];
kmin=a[c][i];
nc=i;
}
}
if(min!=999)
cost_opt+=kmin;
return nc;
int least_apr(int c)
int i,nc=999;
int min=999,kmin=999;
for(i=1;i<=n;i++)
{
if((a[c][i]!=0)&&(visit[i]==0))
if(a[c][i]<kmin)
{
min=a[i][1]+a[c][i];
kmin=a[c][i];
nc=i;
}
}
if(min!=999)
cost_apr+=kmin;
return nc;
void main()
int i,j;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
visit[i]=0;
}
{
printf("\n\n");
for(j=1;j<=n;j++)
printf("\t%d",a[i][j]);
}
mincost_opt(1);
printf("%d",cost_opt);
for(i=1;i<=n;i++)
visit[i]=0;
mincost_apr(1);
printf("%d",cost_apr);
(float)cost_apr/cost_opt);
OUTPUT 1 :
0136
1023
3201
6310
Optimal Solution :
The path is :
1-->2-->4-->3-->1
Minimum cost:8
Approximated Solution :
The path is :
1-->2-->3-->4-->1
Minimum cost:10
Error in approximation is approximated solution/optimal solution=1.250000
using System;
class GFG
// of elements in array
// If position is same as k
if (pos-l == k - 1)
return arr[pos];
if (pos - l > k - 1)
k - pos + l - 1);
// elements in array
return int.MaxValue;
arr[i] = arr[j];
arr[j] = temp;
int x = arr[r], i = l;
if (arr[j] <= x)
swap(arr, i, j);
i++;
swap(arr, i, r);
return i;
// using partition()
int n = r - l + 1;
}
// Driver Code
int n = arr.Length,k = 3;
ob.kthSmallest(arr, 0, n - 1, k));
Output
K'th smallest element is 5
Time Complexity:
The worst-case time complexity of the above solution is still O(n 2). In the worst
case, the randomized function may always pick a corner element. The expected
time complexity of above randomized QuickSelect is O(n), see CLRS
book or MIT video lecture for proof. The assumption in the analysis is, random
number generator is equally likely to generate any number in the input range.
Auxiliary Space: O(1) since using constant variables
#include <stdio.h>
#include <string.h>
{
int M = strlen(pat);
int N = strlen(txt);
int j;
if (txt[i + j] != pat[j])
break;
if (j
// Driver's code
int main()
// Function call
search(pat, txt);
return 0;
}
Output
Pattern found at index 0
Pattern found at index 9
Pattern found at index 13
Time Complexity: O(N2)
Auxiliary Space: O(1)