PROGRAM -11
Object :- write C Program for Recursive Insertion Sort
PROGRAM :-
#include <stdio.h>
void recursiveInsertionSort(int arr[], int n){
if (n <= 1)
return;
recursiveInsertionSort( arr, n-1 );
int nth = arr[n-1];
int j = n-2;
while (j >= 0 && arr[j] > nth){
arr[j+1] = arr[j];
j--;
arr[j+1] = nth;
int main(){
int array[] = {78, 74, 56,65, 9, 15};
int n = sizeof(array)/sizeof(array[0]);
printf("Unsorted Array:\t");
for (int i=0; i < n; i++)
printf("%d ",array[i]);
recursiveInsertionSort(array, n);
printf("\nSorted Array:\t");
Name- University Roll No. Page No.
for (int i=0; i < n; i++)
printf("%d ",array[i]);
return 0;
OUTPUT :-
Unsorted Array: 78 74 56 65 9 15
Sorted Array: 9 15 56 65 74 78
PROGRAM -12
Object :- write an program for Merge
Sort PROGRAM:-
#include <stdio.h>
#include <stdlib.h>
void merge(int arr[], int l, int m, int r)
int i, j, k;
int n1 = m - l +
1; int n2 = r - m;
int L[n1], R[n2];
for (i = 0; i < n1; i++)
L[i] = arr[l + i];
for (j = 0; j < n2; j++)
R[j] = arr[m + 1 + j];
i = 0;
j = 0;
k = l;
while (i < n1 && j < n2) {
if (L[i] <= R[j]) {
arr[k] = L[i];
i++;
else {
arr[k] = R[j];
j++;
} k+
+;
while (i < n1) {
arr[k] = L[i];
i++;
k++;
while (j < n2) {
arr[k] = R[j];
j++;
k++;
void mergeSort(int arr[], int l, int r)
if (l < r) {
int m = l + (r - l) / 2;
mergeSort(arr, l, m);
mergeSort(arr, m + 1, r);
merge(arr, l, m, r);
}
void printArray(int A[], int size)
int i;
for (i = 0; i < size; i++)
printf("%d ", A[i]);
printf("\n");
int main()
int arr[] = { 32, 13, 32, 35, 16 };
int arr_size = sizeof(arr) / sizeof(arr[0]);
printf("Name = Maaz Suhail\n");
printf("Given array is \n");
printArray(arr, arr_size);
mergeSort(arr, 0, arr_size - 1);
printf("\nSorted array is \n");
printArray(arr, arr_size);
return 0;
OUTPUT
Name = Maaz Suhail
Given array is
32 13 32 35 16
Sorted array is
13 16 32 32 35
PROGARM-13
OBJECT:- write a program for quick sort
PROGRAM :-
#include <stdio.h>
#include <stdbool.h>
#define MAX 7
int intArray[MAX] = {4,6,3,2,1,9,7};
void printline(int count) {
int i;
for(i = 0;i < count-1;i++) {
printf("=");
printf("=\n");
void display() {
int i;
printf("[");
for(i = 0;i < MAX;i++) {
printf("%d ",intArray[i]);
printf("]\n");
void swap(int num1, int num2) {
int temp = intArray[num1];
intArray[num1] = intArray[num2];
intArray[num2] = temp;
int partition(int left, int right, int pivot) {
int leftPointer = left -1;
int rightPointer =
right; while(true) {
while(intArray[++leftPointer] < pivot) {
while(rightPointer > 0 && intArray[--rightPointer] > pivot) {
if(leftPointer >= rightPointer) {
break;
} else {
printf(" item swapped :%d,%d\n", intArray[leftPointer],intArray[rightPointer]);
swap(leftPointer,rightPointer);
printf(" pivot swapped :%d,%d\n", intArray[leftPointer],intArray[right]);
swap(leftPointer,right);
printf("Updated Array: ");
display();
return leftPointer;
}
void quickSort(int left, int right) {
if(right-left <= 0) {
return;
} else {
int pivot = intArray[right];
int partitionPoint = partition(left, right, pivot);
quickSort(left,partitionPoint-1);
quickSort(partitionPoint+1,right);
int main() {
printf("Name = Maaz Suhail");
printf("Input Array: ");
display();
printline(50);
quickSort(0,MAX-1);
printf("Output Array: ");
display();
printline(50);
}
OUTPUT :-
Name =Maaz Suhail
Input Array: [4 6 3 2 1 9 7 ]
==================================================
pivot swapped :9,7
Updated Array: [4 6 3 2 1 7 9 ]
pivot swapped :4,1
Updated Array: [1 6 3 2 4 7 9 ]
item swapped :6,2
pivot swapped :6,4
Updated Array: [1 2 3 4 6 7 9 ]
pivot swapped :3,3
Updated Array: [1 2 3 4 6 7 9 ]
Output Array: [1 2 3 4 6 7 9 ]
==================================================
PROGRAM -14
Object :- Write a program to implement counting sort in C language.
PROGRAM :-
#include<stdio.h>
int getMax(int a[], int n) {
int max = a[0];
for(int i = 1; i<n; i++) {
if(a[i] > max)
max = a[i];
return max; //
void countSort(int a[], int n) //
int output[n+1];
int max = getMax(a, n);
int count[max+1];
for (int i = 0; i <= max; ++i)
count[i] = 0; //
for (int i = 0; i < n; i++)
count[a[i]]++;
}
for(int i = 1; i<=max; i++)
count[i] += count[i-1];
for (int i = n - 1; i >= 0; i--) {
output[count[a[i]] - 1] = a[i];
count[a[i]]--;
for(int i = 0; i<n; i++) {
a[i] = output[i];
void printArr(int a[], int n)
int i;
for (i = 0; i < n; i++)
printf("%d ", a[i]); }
int main() {
int a[] = { 11, 30, 24, 7, 31, 16 };
int n = sizeof(a)/sizeof(a[0]);
printf("Before sorting array elements are - \n");
printArr(a, n);
countSort(a, n);
printf("\nAfter sorting array elements are - \n");
printArr(a, n);
return 0; }
OUTPUT :-
Before sorting array elements are -
11 30 24 7 31 16
After sorting array elements are -
7 11 16 24 30 31
PROGRAM – 15
OBJECT :- write a program in C to find the number of days in a given month of the given Year.
PROGRAM :-
#include<stdio.h>
int main()
int year, month;
printf("enter the month\n");
scanf("%d",&month);
printf("enter the year\n");
scanf("%d",&year);
if(month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 ||
month == 12)
printf("Number of days is 31");
else if((month == 2) && ((year%400==0) || (year%4==0 && year%100!=0)))
printf("Number of days is 29");
else if(month==2)
printf("number of days is 28");
else
printf("number of days is 30");}
OUTPUT :-
enter the month
enter the year
2000
Number of days is 31
PROGRAM -16
Object :- WAP to find the number of times digit 5 occurs in each & every number from 0 to n
Program :-
#include <stdio.h>
int count_5s(int n)
int count = 0;
while (n > 0)
if (n % 10 == 5)
count++;
n = n / 10;
return count;
int count_in_range(int n)
int count = 0 ;
for (int i = 4; i <= n; i++)
count += count_5s(i);
}
return count;
int main()
int n;
printf("\nEnter the end value :");
scanf("%d", &n);
printf("\nTotal occurrences of 5 from 0 to %d is %d\n",
n,count_in_range(n));
return 0;
OUTPUT
Enter the end value :99
Total occurrences of 5 from 0 to 99 is 20
PROGRAM 17
OBJECT :- write a program in C to print non repeating element in array
PROGRAM:-
#include<stdio.h>
int main(void){
int n;
printf("enter a value for n: ");
scanf("%d",&n);
int T[n];
int j;
printf("fill in the array: \n");
for(int i=0 ; i<n ; i++)
printf("enter value %d: ",i+1);
scanf("%d",&T[i]);
for(int i=0 ; i<n ; i++)
printf("%d ",T[i]);
printf("the non repeated elements are: \n");
for(int i=0 ; i<n ; i++)
for( j=0 ; j<n ; j++)
{
if(T[i]==T[j] && i!=j)
break;
}}
if(j==n)
printf("%d ",T[i]);
return 0;
OUTPUT
enter a value for n: 3
fill in the array:
enter value 1: 12
enter value 2: 12
enter value 3: 11
12 12 11 the non repeated elements are:
11
PROGRAM 18
OBJECT :- WAP in C to find the sum of odd frequency number of given array
PROGRAM :-
#include<stdio.h>
main()
int a[10],i,sum=0;
printf("Enter upto 5 Values: ");
for(i=0; i<5; i++)
scanf("%d",&a[i]);
for(i=0; i<5; i++)
if(a[i]%2==1)
sum=sum+a[i];
printf("Total Sum of Odd values is: %d ",sum);
getch();
}
OUTPUT :-
Enter upto 5 Values:
12
21
34
32
19
Total Sum of Odd values is: 40
PROGRAM 19
OBJECT :- write a program in C to implement Fractional Knapsack Problem
PROGRAM :-
#include <stdio.h>
#include <stdlib.h>
typedef struct Item{
int itemId;
int weight;
int profit;
float pByw; // profit/weight
float xi;
} Item;
void margeRev(Item *arr, int low, int mid, int high)
int i = low;
int j = mid + 1;
int c = 0;
int temp_Arr_size = high - low + 1;
Item *tempArr = (Item *)malloc(sizeof(arr[0]) * temp_Arr_size);
while (i <= mid && j <= high)
if (arr[i].pByw > arr[j].pByw)
tempArr[c++] = arr[i++];
else
tempArr[c++] = arr[j++];
while (i <= mid) tempArr[c+
+] = arr[i++];
while (j <= high) tempArr[c+
+] = arr[j++];
for (i = low, c = 0; i <= high; i++)
arr[i] = tempArr[c++];
void margeSortRev(Item *arr, int low, int high)
if (low < high)
int mid = (high + low) / 2;
margeSortRev(arr, low, mid);
margeSortRev(arr, mid + 1,
high); margeRev(arr, low, mid,
high);
float fractionalknapsack(Item *items, int n, int capacity)
margeSortRev(items, 0, n - 1);
float profit = 0;
int i = 0;
int takenWeight = 0;
for (i = 0; i < n; i++)
if (takenWeight + items[i].weight <= capacity)
profit += items[i].profit;
takenWeight += items[i].weight;
items[i].xi = 1;
else
items[i].xi = ((float)capacity - takenWeight) / items[i].weight;
takenWeight += items[i].xi * items[i].weight;
profit += items[i].xi * items[i].profit;
break;
return profit;
int main()
{ int n, i, knapsackCapacity;
printf("How many items? ");
scanf("%d", &n);
Item *items = (Item *)malloc(sizeof(Item) * n);
for (i = 0; i < n; i++)
{
printf("Enter itemId, weight, profit : ");
scanf("%d %d %d", &items[i].itemId, &items[i].weight,
&items[i].profit); items[i].pByw = (float)items[i].profit / items[i].weight;
printf("Enter knapsack Capacity? ");
scanf("%d", &knapsackCapacity);
float totalProfit = fractionalknapsack(items, n, knapsackCapacity);
printf("Total Profit %f", totalProfit);
return 0;
OUTPUT :-
How many items? 4
Enter itemId, weight, profit : 101
21
13
Enter itemId, weight, profit : 102
13
14
Enter itemId, weight, profit : 103
12
31
Enter itemId, weight, profit : 104
12
23
Enter knapsack Capacity? 50
Total Profit 76.047623