DSA Lab 11 Solved

You might also like

Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 8

Bahria University, Lahore Campus

Department of Computer Sciences


Lab Journal 11
(Fall 2019)

Course: Data Structure and Algorithms Date: 2-12-2019


Course Code: CEL – 220 Max Marks:
Faculty’s Name: Sir Tahir Iqbal Lab Engineer: Sir Shoaib

Name: Hamza Ayyub Enroll No: 03-135182-006

Question No 1:
Merge-Sort Implementation using Array
Code-1:
#include <iostream>
using namespace std;
void merge(int arr[], int start, int end, int mid)
{
int i, j, k;
int new_arr[50];
i = start;
k = start;
j = mid + 1;
while (i <= mid && j <= end)
{
if (arr[i] < arr[j])
{
new_arr[k] = arr[i];
k++;
i++;
}
else
{
new_arr[k] = arr[j];
k++;
j++;
}
}
while (i <= mid)
{
new_arr[k] = arr[i];
k++;
i++;
}
while (j <= end)
{
new_arr[k] = arr[j];
k++;
j++;
}
for (i = start; i < k; i++)
{
arr[i] = new_arr[i];
}
}
void merge_sort(int arr[], int start, int end)
{
int mid;
if (start < end)
{
mid = (start + end) / 2;
merge_sort(arr, start, mid);
merge_sort(arr, mid + 1, end);
merge(arr, start,end,mid);
}
}
int main()
{
int arr[30],num;
cout << "How many number you entered ?"<<endl;
cin >> num;
cout << "\t\tEnter Array interger;" << endl;
for (int i = 0; i < num; i++)
{
cin >> arr[i];

}
merge_sort(arr, 0, num - 1);
cout << "Sorted array\n";
for (int i = 0; i < num; i++)
{
cout << arr[i] << "\t";
}
system("pause");
return 0;
}
Code -2:
#include <iostream>
using namespace std;
void merge(int arr[], int start, int end, int mid)
{
int i, j, k;
i = start;
k = start;
j = mid + 1;
int *new_arr = new int[];
while (i <= mid && j <= end)
{
if (arr[i] < arr[j])
{
new_arr[k] = arr[i];
i++;
k++;
}
else
{
new_arr[k] = arr[j];
j++;
k++;
}

}
while (i <= mid)
{

new_arr[k] = arr[i];
k++;
i++;

}
while (j <= end)
{
new_arr[k] = arr[j];
k++;
j++;

for (i = start; i < k; i++)


{
arr[i] = new_arr[i];

void merge_sort(int arr[], int start, int end)


{
int mid;
if (start < end)
{
mid = (start + end) / 2;
merge_sort(arr, start, mid);
merge_sort(arr, mid + 1, end);
merge(arr, start, mid,end);
}
}
int main()
{

int arr[] = { 60, 51, 13, 5, 46, 17 };


int arr_size = sizeof(arr) / sizeof(arr[0]);
merge_sort(arr, 0, arr_size - 1);
for (int i = 0; i < arr_size; i++)
{
cout << arr[i] << "\t";
}
system("pause");
return 0;
}

Question No 2:
Quick-Sort Implementation using Array
Code:
#include<iostream>
using namespace std;
int partition(int arr[], int lower_b, int upper_b)
{
int start, end, pivot;
int swap;
pivot = arr[lower_b];
start = lower_b;
end = upper_b;
while (start<end)
{
while (arr[start] <= pivot)
{
start++;
}
while (arr[end] > pivot)
{
end--;
}
if (start < end)
{
swap = arr[start];
arr[start] = arr[end];
arr[end] = swap;
}
}
swap = arr[lower_b];
arr[lower_b] = arr[end];
arr[end] = swap;
return end;
}
void quick_sort(int arr[], int start, int end)
{
int location;
if (start < end)
{
location = partition(arr, start, end);
quick_sort(arr, start, location - 1);
quick_sort(arr,location+1,end);
}
}
int main()
{
int arr[5];
int num;
cout << "How many integers you entered" << endl;
cin >> num;
cout << "\t\tIntergers" << endl;
for (int i = 0; i < num; i++)
{
cin >> arr[i];
}
quick_sort(arr, 0, num - 1);
for (int i = 0; i < num; i++)
{
cout << arr[i] << "\t";
}
system("pause");
return 0;
}
Question No 3:
Merge-Sort Implementation using Linked List
Code:
#include<iostream>
using namespace std;
class list
{
private:
int data;
list *next;
list *head = NULL, *tail = NULL;
public:
void create_list(int val)
{
list *newnode = new list;
newnode->data = val;
newnode->next = NULL;
if (head == NULL)
{
head = newnode;
tail = newnode;
}
else
{
tail->next = newnode;
tail = newnode;
}
}
int Peak()
{
if (head == NULL)
return 0;
else
return head->data;
}

void display()
{
for (list *temp = head; temp != NULL; temp = temp->next)
{
cout << temp->data << "\t";
}
}
int delete_list()
{

list *temp = new list;


temp = head;
head = head->next;
return temp->data;
delete temp;
}
int size()
{
int count = 0;
list *temp = new list;
temp = head;
while (temp != NULL)
{
temp = temp->next;
count++;
}
return count;
}

};
void merge(list &left, list &right, list &obj){

while (left.Peak() != NULL && right.Peak() != NULL)


{
if (left.Peak() < right.Peak())
{
obj.create_list(left.delete_list());
}
else
{
obj.create_list(right.delete_list());
}
}
while (left.Peak() != NULL)
{
obj.create_list(left.delete_list());
}
while (right.Peak() != NULL)
{
obj.create_list(right.delete_list());
}
}
void mergeSort(list &obj, int size)
{
list left, right;
if (size < 2)
return;
int mid = size / 2;
for (int i = 0; i < mid; i++)
{
left.create_list(obj.delete_list());
}
for (int i = mid; i < size; i++)
{
right.create_list(obj.delete_list());
}

mergeSort(left, left.size());
mergeSort(right, right.size());
merge(left, right, obj);
}
int main()
{
list obj;
int size, num;
cout<<"\t\t Enter the Size: "<<endl;
cin >> size;
for (int i = 0; i < size; i++)
{
cout << "\t\tEnter Numbers ";
cin >> num;
obj.create_list(num);
}
cout << endl;
cout << "\t\t BEFORE SORT: ";
obj.display();
mergeSort(obj, size);
cout << endl;
cout << "\t\t AFTER SORT: ";
obj.display();
cout << endl;
system("pause");
return 0;
}

You might also like