This document contains code for implementing quicksort and mergesort algorithms in C++. For quicksort, it includes functions for swapping elements, printing the array, finding the partition point using the pivot element, and recursively sorting elements. For mergesort, it includes functions for displaying the array, merging two sorted subarrays, and recursively sorting and merging subarrays. The main function provides sample code to test each algorithm on sample input arrays and output the sorted results.
Download as DOCX, PDF, TXT or read online on Scribd
0 ratings0% found this document useful (0 votes)
22 views
Design and Analysis of Algorithms
This document contains code for implementing quicksort and mergesort algorithms in C++. For quicksort, it includes functions for swapping elements, printing the array, finding the partition point using the pivot element, and recursively sorting elements. For mergesort, it includes functions for displaying the array, merging two sorted subarrays, and recursively sorting and merging subarrays. The main function provides sample code to test each algorithm on sample input arrays and output the sorted results.
#include <iostream> using namespace std; // function for swapping void swap(int* a, int* b) { int t = *a; *a = *b; *b = t; } // function for printing the array void printArray(int array[], int size) { int i; for (i = 0; i < size; i++) cout << array[i] << " "; cout << endl; } // function to rearrange the array (find the partition point) int partition(int array[], int low, int high) { // selecting the rightmost element as the pivot int pivot = array[high]; // pointer "i" for greater element int i = (low - 1); // traverse each element of the array // compare them with the pivot for (int j = low; j < high; j++) { if (array[j] <= pivot) {
// if element smaller than pivot is found
// swap it with the greater element pointed by i i++; // swap element at i with element at j swap(&array[i], &array[j]); } } // swap pivot with the greater element at i swap(&array[i + 1], &array[high]); // return the partition point return (i + 1); } void quickSort(int array[], int low, int high) { if (low < high) { // find the pivot element such that // elements smaller than pivot are on left of pivot // elements greater than pivot are on righ of pivot int pi = partition(array, low, high); // recursive call on the left of pivot quickSort(array, low, pi - 1); // recursive call on the right of pivot quickSort(array, pi + 1, high); } } // Main Code int main() { int data[] = { 8, 7, 6, 1, 0, 9, 2 }; int n = sizeof(data) / sizeof(data[0]); cout << "Unsorted Array: \n"; printArray(data, n); // perform quicksort on data quickSort(data, 0, n - 1); cout << "Sorted array in ascending order: \n"; printArray(data, n); } MERGE SORT
#include<iostream> using namespace std;
void display(int* array, int size)
{ for (int i = 0; i < size; i++) cout << array[i] << " "; cout << endl; } void merge(int* array, int l, int m, int r) { int i, j, k, nl, nr; nl = m - l + 1; //size of the left sub-array nr = r - m; //size of the right sub-array int leftarr[nl], rightarr[nr]; //fill left and right sub-arrays for (i = 0; i < nl; i++) leftarr[i] = array[l + i]; for (j = 0; j < nr; j++) rightarr[j] = array[m + 1 + j]; i = 0; j = 0; ;k = l; //marge temp arrays to real array while (i < nl && j < nr) { if (leftarr[i] <= rightarr[j]) { array[k] = leftarr[i]; i++; } else { array[k] = rightarr[j]; j++; } k++; } while (i < nl) { //extra element in left array array[k] = leftarr[i]; i++; k++; } while (j < nr) { //extra element in right array array[k] = rightarr[j]; j++; k++; } } void mergeSort(int* array, int l, int r) { int m; if (l < r) //checks if it is single element array { int m = l + (r - l) / 2; //finding the middle element // Recursive function call to Sort first and second arrays mergeSort(array, l, m); //first half mergeSort(array, m + 1, r); //second half merge(array, l, m, r); //merge back } } int main() { int n; cout << "Enter the number of elements: "; cin >> n; int arr[n]; //create an array with given number of elements cout << "Enter elements:" << endl; for (int i = 0; i < n; i++) { cin >> arr[i]; } cout << "Array before Sorting: "; display(arr, n); mergeSort(arr, 0, n - 1); //(n-1) for last index cout << "Array after Sorting: "; display(arr, n); }