Design and Analysis of Algorithm[1]
Design and Analysis of Algorithm[1]
Engineering
Design and Analysis of Algorithm
(R1UC404B)
Name: Ketan Dubey
Admission No.: 22SCSE1010483
Section: 03
Program: Btech CSE
Submitted to: Mr. Pravin Kumar, Mr. Ankur Gogoi
Sno. Experiment name Date signature
1 Write a program to sort given set of numbers in
ascending/descending order using Bubble sort and
also search a number using binary search.
Q2: Write a program to sort given set of numbers in ascending/descending order using
Insertion sort and also search a number using linear search.
Answer:
import java.util.Scanner;
insertionSort(arr, choice);
System.out.println("Sorted array:");
for (int i = 0; i < n; i++) {
System.out.print(arr[i] + " ");
}
System.out.println();
if (index == -1) {
System.out.println("Element not found in the array.");
} else {
System.out.println("Element found at index " + index);
}
}
if (choice == 1) {
while (j >= 0 && arr[j] > key) {
arr[j + 1] = arr[j];
j--;
}
} else {
while (j >= 0 && arr[j] < key) {
arr[j + 1] = arr[j];
j--;
}
}
arr[j + 1] = key;
}
}
public static void quickSort(int[] arr, int low, int high, int choice) {
if (low < high) {
int pivotIndex = partition(arr, low, high, choice);
quickSort(arr, low, pivotIndex - 1, choice);
quickSort(arr, pivotIndex + 1, high, choice);
}
}
private static int partition(int[] arr, int low, int high, int choice) {
int pivot = arr[high];
int i = low - 1;
swap(arr, i + 1, high);
return i + 1;
}
public static void mergeSort(int[] arr, int left, int right, int choice) {
if (left < right) {
int mid = left + (right - left) / 2;
mergeSort(arr, left, mid, choice);
mergeSort(arr, mid + 1, right, choice);
merge(arr, left, mid, right, choice);
}
}
private static void merge(int[] arr, int left, int mid, int right, int choice) {
int i, j, k;
int n1 = mid - left + 1;
int n2 = right - mid;
i = 0;
j = 0;
k = left;
while (i < n1 && j < n2) {
if (choice == 1) {
if (L[i] <= R[j]) {
arr[k++] = L[i++];
} else {
arr[k++] = R[j++];
}
} else {
if (L[i] >= R[j]) {
arr[k++] = L[i++];
} else {
arr[k++] = R[j++];
}
}
}
Q4: Write a program to sort given set of numbers using Heap sort.
Answer:
public class Q4_22SCSE1010483 {
heapify(arr, i, 0);
}
}
if (largest != i) {
int swap = arr[i];
arr[i] = arr[largest];
arr[largest] = swap;
heapify(arr, n, largest);
}
}
Q5: Write a program to sort given set of numbers using merge sort.
Answer:
public class Q5_22SCSE1010483 {
int i = 0, j = 0;
int k = left;
while (i < n1 && j < n2) {
if (leftArray[i] <= rightArray[j]) {
arr[k] = leftArray[i];
i++;
} else {
arr[k] = rightArray[j];
j++;
}
k++;
}
System.out.println("Given Array");
printArray(arr);
System.out.println("\nSorted array");
printArray(arr);
}
}
sort(arr);
System.out.println("Sorted Array:");
printArray(arr);
}
}
class Item {
int value, weight;
return totalValue;
}
public static int knapSack(int capacity, int weights[], int values[], int n) {
int i, w;
int K[][] = new int[n + 1][capacity + 1];
return K[n][capacity];
}
class Q10_22SCSE1010483 {
Graph(int V) {
this.V = V;
adj = new LinkedList[V];
for (int i = 0; i < V; i++) {
adj[i] = new LinkedList<>();
}
}
Arrays.fill(dist, Integer.MAX_VALUE);
dist[src] = 0;
pq.add(new Node(src, 0));
while (!pq.isEmpty()) {
Node node = pq.poll();
int u = node.vertex;
printSolution(dist);
}
g.addEdge(0, 1, 4);
g.addEdge(0, 7, 8);
g.addEdge(1, 2, 8);
g.addEdge(1, 7, 11);
g.addEdge(2, 3, 7);
g.addEdge(2, 8, 2);
g.addEdge(2, 5, 4);
g.addEdge(3, 4, 9);
g.addEdge(3, 5, 14);
g.addEdge(4, 5, 10);
g.addEdge(5, 6, 2);
g.addEdge(6, 7, 1);
g.addEdge(6, 8, 6);
g.addEdge(7, 8, 7);
g.dijkstra(0);
}
}
Ans=
import java.util.ArrayList;
import java.util.List;
private int V;
this.src = src;
this.dest = dest;
this.weight = weight;
}
BellmanFord(int V) {
this.V = V;
adj.add(new ArrayList<>());
dist[i] = Integer.MAX_VALUE;
dist[src] = 0;
return null;
return dist;
}
public static void main(String[] args) {
int V = 5;
graph.addEdge(0, 1, -1);
graph.addEdge(0, 2, 4);
graph.addEdge(1, 2, 3);
graph.addEdge(2, 1, 1);
graph.addEdge(1, 3, 2);
graph.addEdge(2, 3, 2);
graph.addEdge(3, 4, -2);
if (dist == null) {
} else {
Output:
Ans=
final int N;
public NQueens(int n) {
this.N = n;
if (board[i][col] == 1) {
return false;
if (board[i][j] == 1) {
return false;
if (board[i][j] == 1) {
return false;
return true;
if (col >= N) {
return true;
if (isSafe(board, i, col)) {
board[i][col] = 1;
return true;
board[i][col] = 0;
return false;
}
System.out.println();
int N = 4;
if (queens.solveNQueens(board, 0)) {
System.out.println("Solution found:");
queens.printSolution(board);
} else {
Output:
Ans=
int hash = 0;
for (int i = 0; i < n; i++) {
return hash;
int result = 1;
result = (result * x) % q;
return result;
int M = pat.length();
int N = txt.length();
int p = 0;
int t = 0;
int h = 1;
if (M > N) {
return;
h = dthPower(d, M - 1);
p = hash(pat, M);
t = hash(txt, M);
if (p == t) {
found = false;
break;
}
}
if (found) {
if (i < N - M) {
if (t < 0) {
t = (t + q);
rk.search(pat, txt);
Output:
Ans=
import java.util.*;
private int V;
private List<List<Integer>> adj;
public TopologicalSort(int v) {
V = v;
adj.add(new ArrayList<>());
adj.get(u).add(v);
visited[v] = true;
Integer i;
for (i : adj.get(v)) {
if (!visited[i])
stack.push(v);
List<Integer> topologicalSort() {
visited[i] = false;
if (!visited[i])
while (!stack.isEmpty())
order.add(stack.pop());
return order;
g.addEdge(5, 2);
g.addEdge(5, 0);
g.addEdge(4, 0);
g.addEdge(4, 1);
g.addEdge(2, 3);
g.addEdge(3, 1);
Output:
Ans:
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
this.dest = dest;
this.weight = weight;
UnionFind(int n) {
parent[i] = i;
int find(int x) {
if (parent[x] != x)
parent[x] = find(parent[x]);
return parent[x];
parent[rootX] = rootY;
parent[rootY] = rootX;
else {
parent[rootY] = rootX;
rank[rootX]++;
int mstCost = 0;
int edgesIncluded = 0;
int x = uf.find(edge.src);
int y = uf.find(edge.dest);
if (x != y) {
uf.union(x, y);
mstCost += edge.weight;
edgesIncluded++;
if (edgesIncluded == V - 1)
return mstCost;
int V = 5;
Output:
Q.16 Write a program to implement Sum of subset problem.
Ans:
Class KetanSubsetSum {
if (n == 0) return false;
int sum = 9;
else
Output:
Q.17 Write a program to implement Greedy algorithm using Task Scheduling Problem.
Ans:
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
int startTime;
int endTime;
this.endTime = endTime;
int lastEndTime = 0;
int count = 0;
lastEndTime = task.endTime;
count++;
return count;
Output:
Q.18 Write a program to implement Greedy algorithm using Acitivity Selection Problem.
Ans:
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
int start;
int finish;
this.start = start;
this.finish = finish;
int currentEndTime = 0;
selectedActivities.add(activity);
currentEndTime = activity.finish;
return selectedActivities;
System.out.println("Selected activities:");
Output:
Q.19 Compute the transitive closure of a given directed graph using Warshall's algorithm. Write a program to
implement shortest path algorithm.
Ans:
System.out.println();
}
}
int[][] graph = {
{1, 0, 0, 1},
{0, 1, 0, 1},
{0, 0, 1, 0},
{0, 0, 0, 1}
};
transitiveClosure(graph, V);
printTransitiveClosure(graph, V);
Output:
Ans:
int m = str1.length();
int n = str2.length();
if (i == 0 || j == 0) {
dp[i][j] = 0;
} else {
dp[i][j] = Math.max(dp[i - 1][j], dp[i][j - 1]);
return dp[m][n];
Output: