//1st //GCD #include<stdio.h> #include<stdlib.h> int euclid(int m, int n) { int r; float count = 0; while(n) { count++; r = m%n; m = n; n = r; } return count; } int consec(int m, int n) { int min; int count = 0; min = m; if(n < min) min = n; while(n != 1) { count++; if(m%min == 0) { count++; if(n%min == 0) break; min -= 1; } else min -= 1; } return count; } int modified(int m, int n) { int temp; int count = 0; while(n > 0) { if(m < n) { temp = m; m = n; n = temp; } count += 1; m = m - n; } return count; } void analysis(int ch) { int m, n, i, j, k; int count, maxcount, mincount; FILE *fp1, *fp2; for(i = 10; i <= 200; i += 10){ maxcount = 0; mincount = 1000000; for(j = 2; j <= i; j++) { for(k = 2; k <= i; k++) { count = 0; m = j; n = k; switch(ch) { case 1 : count = euclid(m, n); break; case 2 : count = consec(m, n); break; case 3 : count = modified(m, n); break; } if(count > maxcount) maxcount = count; if(count < mincount) mincount = count; } } switch(ch){ case 1: fp2 = fopen("Euclid_B.txt", "a"); fp1 = fopen("Euclid_W.txt", "a"); break; case 2: fp2 = fopen("CI_B.txt", "a"); fp1 = fopen("CI_W.txt", "a"); break; case 3: fp2 = fopen("ME_B.txt", "a"); fp1 = fopen("ME_W.txt", "a"); break; } fprintf(fp2, "%d %d\n", i, mincount); fclose(fp2); fprintf(fp1, "%d %d\n", i, maxcount); fclose(fp1); } } int main() { int ch; while(1) { printf("GCD\n"); printf("1.Euclid\n2.Consecutive Integer\n3.Modified Euclid\n"); scanf("%d", &ch); switch(ch) { case 1: case 2: case 3: analysis(ch); break; default:exit(1); } } return 0; } //gnu-plot set title 'PROGRAM NAME' set xrange[0:100] set yrange[1:100] set xlabel "input size(n)" set ylabel "op count" set style line 10 linetype 1 linecolor rgb "red" plot 'best.txt' using 1:2 title "best" with lines,'avg.txt' using 1:2 title "avg" with lines,'worst.txt' using 1:2 title "worst" with lines ///////////////////////////////////////////////////// 2 //linear-search #include<stdio.h> #include<stdlib.h> #include<time.h> void linear(int ch) { int *a, i, itn = 1; FILE *fp1, *fp2; int key, count; srand(time(NULL)); for(int n = 10; n <= 100; n += 10) { fp1 = fopen("Linear_Data.txt", "a"); a = (int *)malloc(n*sizeof(int)); for(i = 0; i < n; i++) a[i] = rand() % 100; switch(ch) { case 1: key = a[0]; fp2 = fopen("linear_B.txt", "a"); break; case 2: a[n/2] = 1000; key = a[n/2]; fp2 = fopen("linear_A.txt", "a"); break; case 3: key = -1; fp2 = fopen("linear_W.txt", "a"); break; } count = 0; for(i = 0; i < n; i++){ count++; if(a[i] == key) break; } fprintf(fp1, "Iteration %d\n", itn++); for(i = 0; i < n; i++) fprintf(fp1, "%d ", a[i]); fprintf(fp1, "\nKey: %d \n\n", key); fprintf(fp2, "%d %d\n", n, count); fclose(fp1); fclose(fp2); } } int main() { int ch; while(1) { printf("Linear search Algorithm\n"); printf("1.Best Case \n2.Average Case\n3.Worst Case\n 4.Exit\n"); scanf("%d", &ch); switch(ch) { case 1: case 2: case 3: linear(ch); break; case 4: exit(1); default: printf("Invalid case\n"); } } return 0; } //recursive-binary #include<stdio.h> #include<stdlib.h> #include<time.h> #define x 10 #define y 100 int count=0; void binsearch(int arr[],int low,int high,int key) { int mid=low+(high-low)/2; count++; if(arr[mid]==key) return; else if(arr[mid]>key) binsearch(arr,low,mid-1,key); else binsearch(arr,mid+1,high,key); } void analysis(int choice) { FILE *b; int i,j,key,temp,res;int *arr; srand(time(NULL)); for(i=x;i<=y;i=i+10){ count = 0; arr=(int *)malloc(i*sizeof(int)); res=rand()%100; for(j=0;j<i;j++) arr[j]=j+res; switch(choice) { case 1: b=fopen("best.txt","a"); key=arr[(i-1)/2]; break; case 2: b=fopen("worst.txt","a"); key=arr[i-1]; break; case 3: b=fopen("avg.txt","a"); temp=rand()%(i-1); key=arr[temp]; break; } binsearch(arr,0,i-1,key); fprintf(b,"%d\t%d\n",i,count); fclose(b); free(arr); } } int main() { int choice; while(1){ printf("1.Best Case\n"); printf("2.Worst Case\n"); printf("3.Average Case\n"); printf("4.Exit\n"); scanf("%d",&choice); switch(choice){ case 1: case 2: case 3: analysis(choice); break; case 4: exit(0); default : printf("Invalid Input\n"); } } return 0; } ///////////////////////////////////////////////////// 3 //Selection #include<stdio.h> #include<stdlib.h> #include<time.h> int selection(int arr[], int n) { int cnt = 0, min, temp; for(int i = 0; i < n-1; i++) { min = i; for(int j = i+1; j < n; j++) { cnt++; if (arr[j] < arr[min]) min = j; } temp=arr[min]; arr[min]=arr[i]; arr[i]=temp; } return cnt; } void analysis() { FILE *input; FILE *output; srand(time(NULL)); int count=0; int round=0,i,j; for(i=10;i<=20;i++) { int *arr=(int *)malloc(sizeof(int)*i); input=fopen("input.txt","a"); fprintf(input,"Loop %d \nBefore sorting : ",++round); for(j=0;j<i;j++) { arr[j]=rand()%100; fprintf(input,"%d\t",arr[j]); } count=selection(arr, i); output=fopen("output.txt","a"); fprintf(output,"%d \t %d \n",i,count); fclose(output); fprintf(input,"\nAfter sorting : "); for(j=0;j<i;j++) fprintf(input,"%d \t",arr[j]); fprintf(input,"\n\n"); fclose(input); } } int main(){ analysis(); } //insertion #include <stdio.h> #include <stdlib.h> #include <time.h> int insertion(int *a, int n) { int count = 0; int i, j, v; for(i = 1; i <= n-1; i++) { v = a[i]; j = i-1; while((j >= 0) && (a[j] > v)) { a[j+1] = a[j]; j = j - 1; count++; } if(j == -1) continue; count++; a[j+1] = v; } return count; } void analysis(int ch) { FILE *fp; int i, j, *A, count; srand(time(NULL)); if(ch == 1) fp = fopen("I_best.txt", "a"); else if(ch == 2) fp = fopen("I_worst.txt", "a"); else fp = fopen("I_avg.txt", "a"); for(i = 10; i <= 100; i+=10) { A = (int *)malloc(i*sizeof(int)); if(ch == 1) for(j = 0; j < i; j++) A[j] = j; else if(ch == 2) for(j = 0; j < i; j++) A[j] = i - j; else for(j = 0; j < i; j++) A[j] = rand()%100; count = insertion(A, i); fprintf(fp, "%d \t %d\n", i, count); } fclose(fp); } int main() { int choice; while(1) { printf("1.Best Case \n2.Worst Case \n3.Average Case \n"); scanf("%d", &choice); switch(choice) { case 1 : case 2 : case 3 : analysis(choice); break; default : exit(0); } } return 0; } //GNUPLOT set title 'Insertion Sort' set xrange[10:100] set yrange[0:5000] set xlabel 'Input size(n)' set ylabel 'Basic operation count' set style data linespoints plot 'I_best.txt' title 'Best Case', 'I_avg.txt' title 'Average Case', 'I_worst.txt' title 'Worst Case' //BUbble #include<stdio.h> #include<stdlib.h> #include<time.h> int bubblesort(int a[], int n) { int flag, temp, cnt = 0; for(int i = 0; i < n-1; i++) { flag=0; for(int j = 0; j < n-i-1; j++) { cnt++; if(a[j] > a[j+1]) { flag = 1; temp = a[j]; a[j] = a[j+1]; a[j+1] = temp; } } if(flag == 0) break; } return cnt; } void analysis(int ch) { FILE *f1; int i, j, count, *a, temp; srand(time(NULL)); for(i = 10; i <= 100; i += 10) { if(ch == 1) f1 = fopen("b_input.txt", "a"); else if(ch == 2) f1 = fopen("w_input.txt", "a"); else f1 = fopen("a_input.txt", "a"); a = (int *)malloc(sizeof(int)*i); temp = i; for(j = 0; j < i; j++) { if(ch == 1) a[j] = temp++; else if(ch == 2) a[j] = temp--; else if(ch == 3) a[j] = rand()%100; } count = bubblesort(a, i); fprintf(f1,"%d\t%d\n",i,count); fclose(f1); } } int main() { int ch; while(1) { printf("Bubble sort algorithm analysis\n"); printf("1.Best case\n2.Worst case\n3.Average Case"); scanf("%d", &ch); switch(ch) { case 1: case 2: case 3: analysis(ch); break; default:exit(1); } } return 0; } ///////////////////////////////////////////////////// 4 //String #include <stdio.h> #include <stdlib.h> #include <time.h> #define x 100 #define y 1000 int matching(int t[], int p[], int i) { int count = 0; for(int j = 0; j <= 10-i; j++) { int k = 0; count++; while (k<i && t[j+k] == p[k]) { count++; k++; } if (k == i) break; } return count; } void analysis(int ch) { FILE *fp; int *t, *b, *a, *w, count; srand(time(NULL)); t = (int *)malloc(sizeof(int)*10); for(int i=0; i < 10; i++) t[i] = 0; for(int i = 2; i < 10; i++) { w = (int *)malloc(i*sizeof(int)); b = (int *)malloc(i*sizeof(int)); a = (int *)malloc(i*sizeof(int)); for(int j = 0; j < i; j++) { b[j] = 0; w[j] = 0; a[j] = rand()%2; } w[i-1] = 1; switch (ch) { case 1 : count = matching(t, b, i); fp = fopen("bestcase.txt", "a"); fprintf(fp, "%d \t %d\n", i, count); fclose(fp); break; case 2 : count = matching(t, w, i); fp = fopen("worstcase.txt", "a"); fprintf(fp, "%d \t %d\n", i, count); fclose(fp); break; case 3 : count = matching(t, a, i); fp = fopen("avgcase.txt", "a"); fprintf(fp, "%d \t %d\n", i, count); fclose(fp); break; } } } int main() { int choice; while (1) { printf("1.Best Case\n"); printf("2.Worst case \n"); printf("3.Avg case\n"); scanf("%d", &choice); switch (choice) { case 1: case 2: case 3: analysis(choice); break; case 4: exit(0); } } return 0; } //gnuplot set title 'String Comparision' set xrange[2:10] set yrange[0:40] set xlabel 'input size' set ylabel 'basic count' set style data linespoints plot 'bestcase.txt' title 'Best case', 'avgcase.txt' title 'Average case', 'worstcase.txt' title 'Worst case' ///////////////////////////////////////////////////// 5 #include <stdio.h> #include <stdlib.h> int count = 0; void join(int arr[], int left[], int right[], int l, int m, int r) { int i; // Used in second loop for (i = 0; i <= m - l; i++) arr[i] = left[i]; for (int j = 0; j < r - m; j++) arr[i + j] = right[j]; } // Function to store alternate elements in left // and right subarray void split(int arr[], int left[], int right[], int l, int m, int r) { for (int i = 0; i <= m - l; i++) left[i] = arr[i * 2]; for (int i = 0; i < r - m; i++) right[i] = arr[i * 2 + 1]; } // Function to generate Worst Case of Merge Sort void worstCase(int arr[], int l, int r) { if (l < r) { int m = l + (r - l) / 2; // create two auxiliary arrays int left[m - l + 1]; int right[r - m]; // Store alternate array elements in left // and right subarray split(arr, left, right, l, m, r); // Recurse first and second halves worstCase(left, l, m); worstCase(right, m + 1, r); // join left and right subarray join(arr, left, right, l, m, r); } } void merge(int arr[], int l, int m, int r) { int i, j, k; int n1 = m - l + 1; int n2 = r - m; /* create temp arrays */ int L[n1], R[n2]; /* Copy data to temp arrays L[] and R[] */ for (i = 0; i < n1; i++) L[i] = arr[l + i]; for (j = 0; j < n2; j++) R[j] = arr[m + 1 + j]; /* Merge the temp arrays back into arr[l..r]*/ i = 0; // Initial index of first subarray j = 0; // Initial index of second subarray k = l; // Initial index of merged subarray while (i < n1 && j < n2) { count++; if (L[i] <= R[j]) { arr[k] = L[i]; i++; } else { arr[k] = R[j]; j++; } k++; } /* Copy the remaining elements of L[], if there are any */ while (i < n1) { arr[k] = L[i]; i++; k++; } /* Copy the remaining elements of R[], if there are any */ while (j < n2) { arr[k] = R[j]; j++; k++; } } void msort(int arr[], int l, int r) { if (l < r) { int m = l + (r - l) / 2; msort(arr, l, m); msort(arr, m + 1, r); merge(arr, l, m, r); } } void analysis(int ch) { FILE *fp; int *w, *b; for(int i = 10; i <= 100; i += 10) { b = (int *)malloc(i*sizeof(int)); w = (int *)malloc(i*sizeof(int)); for(int j = 0; j < i; j++) { b[j] = j; w[j] = j; } switch (ch) { case 1 : msort(b, 0, i-1); fp = fopen("msort_b.txt", "a"); fprintf(fp, "%d \t %d \n", i, count); count = 0; fclose(fp); break; case 2 : worstCase(w, 0, i-1); msort(w, 0, i-1); fp = fopen("msort_w.txt", "a"); fprintf(fp, "%d \t %d \n", i, count); count = 0; fclose(fp); break; } } } int main() { int ch; printf("1.Best case\n2.Worst case\n"); scanf("%d", &ch); switch (ch) { case 1: case 2: analysis(ch); break; default : exit(0); } return 0; } //gnuplot set title 'merge sort' set xrange [10:100] set yrange [10:500] set xlabel 'Input range' set ylabel 'operation count' set style data linespoints plot 'msort_b.txt' title 'best case', 'msort_w.txt' title 'worst case' ///////////////////////////////////////////////////// 6 #include<stdio.h> #include<stdlib.h> #include<time.h> int count=0; int partition(int *a,int l,int h) { int p=a[l]; int i=l+1; int j=h; int temp; while(i<=j) { count++; while(i<=h && a[i]<p) { count++; i++; } count++; while(p<a[j]) { count++; j--; } if(i<=j) { temp=a[i]; a[i]=a[j]; a[j]=temp; i++; j--; } } temp=a[j]; a[j]=a[l]; a[l]=temp; return j; } void qksort(int *a,int l,int h) { int s; if(l<h) { s=partition(a,l,h); qksort(a,l,s-1); qksort(a,s+1,h); } } void analysis(int ch) { FILE *f; int *b,*a,*w; int i,j; srand(time(NULL)); for(i=10;i<=100;i+=10) { b=(int*)malloc(i*sizeof(int)); a=(int*)malloc(i*sizeof(int)); w=(int*)malloc(i*sizeof(int)); for(j=0;j<i;j++) { b[j]=1; w[j]=i-j; //w[j]=i-j; } switch(ch) { case 1: qksort(b,0,i-1); f=fopen("bs_b.txt","a"); fprintf(f,"%d\t%d\n",i,count); count=0; fclose(f); break; case 2: qksort(w,0,i-1); f=fopen("bs_w.txt","a"); fprintf(f,"%d\t%d\n",i,count); count=0; fclose(f); break; // case 3: // count=qsort(w,0,i-1); // f=fopen("bs_w.txt","a"); // fprintf(f,"%d\t%d\n",i,count); // fclose(f); // break; } } } int main() { int ch; while(1) { printf("Enter your choice\n1.Best case\n2.Worst case\n"); scanf("%d",&ch); switch(ch) { case 1: case 2: analysis(ch); break; default:exit(1); } } return 0; } ///////////////////////////////////////////////////// 7 #include<stdio.h> #include<stdlib.h> int a[20][20],visited[20],n,acyclic=1; void dfs(int v) { int i; visited[v]=1; for (i = 1; i <=n; i++) { if (a[v][i] && visited[i]) { acyclic=0; printf("\n%d->%d",v,i); } if (a[v][i] && !visited[i]) { printf("\n%d->%d",v,i); dfs(i); } } } void connectandcyclic() { int count=0; for (int i = 1; i <=n; i++) { if (visited[i]) { count++; } } if (count==n) { printf("\nGraph is connected"); } else { printf("\nGraph is not connected"); } if (acyclic) { printf("\nGraph is acyclic"); } else { printf("\nGraph is cyclic"); } } int main() { int i,j; int start; printf("enter the number of vertices:"); scanf("%d",&n); for (i = 1; i <=n; i++) //Setup { visited[i]=0; } printf("Enter the adjacency matrix:\n"); for (i = 1; i <=n; i++) { for (j = 1; j<=n; j++) { scanf("%d",&a[i][j]); } } printf("enter the starting vertex:"); scanf("%d",&start); dfs(start); printf("\n"); connectandcyclic(); } ///////////////////////////////////////////////////// 8 #include<stdio.h> #include<stdlib.h> int a[20][20],visited[20],q[20],i,j,n,f=0,r=-1,acyclic=1; void bfs(int v) { for (i = 1; i <=n; i++) { if (a[v][i] && visited[i]) { acyclic=0; printf("%d->%d\n",v,i); } if (a[v][i] && !visited[i]) { q[++r]=i; printf("%d->%d\n",v,i); } } if (r>=f) { visited[q[r]]=1; bfs(q[f++]); } } void connectandcyclic() { int count=0; for (int i = 1; i <=n; i++) { if (visited[i]) { count++; } } if (count==n) { printf("\nGraph is connected"); } else { printf("\nGraph is not connected"); } if (acyclic) { printf("\nGraph is acyclic"); } else { printf("\nGraph is cyclic"); } } int main() { int i,j; int start; printf("enter the number of vertices:"); scanf("%d",&n); for (i = 1; i <=n; i++) //Setup { visited[i]=0; } printf("Enter the adjacency matrix:\n"); for (i = 1; i <=n; i++) { for (j = 1; j<=n; j++) { scanf("%d",&a[i][j]); } } printf("enter the starting vertex:"); scanf("%d",&start); visited[start]=1; bfs(start); connectandcyclic(); } ///////////////////////////////////////////////////// 9 #include<stdio.h> #include<stdlib.h> int G[10][10],n,cnt=0; int stack[10],top=-1,m=0; void dfs(int i,int visited[]) { int j; cnt++; visited[i]=cnt; for(j=0;j<n;j++) if(visited[j]==0 && G[i][j]==1) { dfs(j,visited); stack[++top]=j; m++; } } void DFS(int visited[]) { int i; cnt=0; for(i=0;i<n;i++) if(visited[i]==0) { dfs(i,visited); stack[++top]=i; m++; printf("\n"); } } void generate(int e) { int p,q,k=1; while(k<=e) { printf("enter the connection "); scanf("%d %d",&p,&q); G[p][q]=1; k++; } } void main() { int i,j,e,*visited; printf("enter no of vertices: "); scanf("%d",&n); printf("enter no of edges: "); scanf("%d",&e); visited=(int*)malloc(n*sizeof(int)); for(i=0;i<n;i++){ visited[i]=0; for(j=0;j<n;j++) G[i][j]=0; } generate(e); for(i=0;i<n;i++) { for(j=0;j<n;j++) { printf("%d \t",G[i][j]); } printf("\n"); } DFS(visited); for(j=m-1;j>=0;j--) printf("-%d-",stack[j]); } ///////////////////////////////////////////////////// 10 #include <stdio.h> #include <stdlib.h> int graph[10][10], visited[10]={0}, indegree[10]={0}, n; void createGraph(){ printf("Enter no. of vertices: "); scanf("%d",&n); printf("Enter adjacency matrix:\n"); for(int i=0;i<n;i++){ for(int j=0; j<n;j++) scanf("%d",&graph[i][j]); } }