Analysis of Algorithm Assignment 3
Analysis of Algorithm Assignment 3
We have learned Quick Sort Algorithm in which first element of each subArray was
taken as pivot element but if we want to take pivot element randomly i.e. any element at any
index may become pivot then suggest modification in our Quick sort Algorithm and/or
partition Algorithm. Implement your suggestions to see results.
#include<stdio.h>
if(first<last){
pivot=first;
i=first;
j=last;
while(i<j){
while(number[i]<=number[pivot]&&i<last)
i++;
while(number[j]>number[pivot])
j--;
if(i<j){
temp=number[i];
number[i]=number[j];
number[j]=temp;
temp=number[pivot];
number[pivot]=number[j];
number[j]=temp;
quicksort(number,first,j-1);
quicksort(number,j+1,last);
}
}
int main(){
scanf("%d",&count);
for(i=0;i<count;i++)
scanf("%d",&number[i]);
quicksort(number,0,count-1);
for(i=0;i<count;i++)
printf(" %d",number[i]);
return 0;
#include <stdio.h>
#include <string.h>
int i, j, m, n, LCS_table[20][20];
void lcsAlgo() {
m = strlen(S1);
n = strlen(S2);
LCS_table[i][0] = 0;
LCS_table[0][i] = 0;
} else {
lcsAlgo[index] = '\0';
int i = m, j = n;
i--;
j--;
index--;
}
i--;
else
j--;
int main() {
lcsAlgo();
printf("\n");
#include <stdio.h>
int minMul[n][n];
int j, q;
j = i + L - 1;
minMul[i][j] = 99999999;
if (q < minMul[i][j])
minMul[i][j] = q;
int main(){
getchar();
return 0;
}
Q5 WAP to implement sum of subset algorithms using Backtracking
#include <stdio.h>
#include <stdlib.h>
printf("%*d", 5, A[i]);
printf("\n");
void subset_sum(int s[], int t[], int s_size, int t_size, int sum, int ite, int const target_sum){
total_nodes++;
if (target_sum == sum) {
printValues(t, t_size);
return;
else {
t[t_size] = s[i];
free(tuplet_vector);
int main(){
printValues(set , size);
return 0;
#include <stdio.h>
if (n == 0 || W == 0)
return 0;
if (wt[n - 1] > W)
else
return max(
val[n - 1]
int main()
int W = 50;
return 0;
}
Q8 WAP to implement KMP - Knuth-Morris-Pratt Pattern Matching Algorithm.
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int M = strlen(pat);
int N = strlen(txt);
// create lps[] that will hold the longest prefix suffix values for pattern
computeLPSArray(pat, M, lps);
while (i < N) {
if (pat[j] == txt[i]) {
j++;
i++;
if (j == M) {
printf("Found pattern at index %d \n", i - j);
j = lps[j - 1];
if (j != 0)
j = lps[j - 1];
else
i = i + 1;
int i;
i = 1;
while (i < M) {
if (pat[i] == pat[len]) {
len++;
lps[i] = len;
i++;
if (len != 0) {
} else // if (len == 0)
lps[i] = 0;
i++;
int main() {
KMPSearch(pat, txt);
return 0;
}
Q9 WAP to implement Rabin karp Pattern Matching Algorithm.
#include<stdio.h>
#include<string.h>
#define d 256
*/
int M = strlen(pat);
int N = strlen(txt);
int i, j;
h = (h*d)%q;
p = (d*p + pat[i])%q;
t = (d*t + txt[i])%q;
// If the hash values match then only check for characters on by one
if ( p == t )
if (txt[i+j] != pat[j])
break;
}
if (j == M) // if p == t and pat[0...M-1] = txt[i, i+1, ...i+M-1]
// Calculate hash value for next window of text: Remove leading digit,
if ( i < N-M )
if(t < 0)
t = (t + q);
int main()
return 0;
}
Q10 WAP to implement boyce moore Pattern Matching Algorithm.
# include <limits.h>
# include <string.h>
# include <stdio.h>
return (a > b) ? a : b;
int i;
badchar[(int) str[i]] = i;
int m = strlen(pat);
int n = strlen(txt);
int badchar[NO_OF_CHARS];
badCharHeuristic(pat, m, badchar);
int j = m - 1;
j--;
if (j < 0) {
else
int main() {
search(txt, pat);
return 0;
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <string.h>
#define SEED 35791246
int niter=0;
double x,y;
double z;
double pi;
scanf("%d",&niter);
srand(SEED);
count=0;
x = (double)rand()/RAND_MAX;
y = (double)rand()/RAND_MAX;
z = x*x+y*y;
if (z<=1) count++;
pi=(double)count/niter*4;