This document contains code for implementing quicksort and mergesort algorithms in C++. It includes the code to perform the sorting, functions to print and swap array elements, and main functions to test the sorting algorithms. Quicksort uses partitioning to recursively sort arrays by picking a pivot element, and mergesort recursively divides arrays in half and then merges the sorted halves. The code samples were submitted as part of a final project for a Design and Analysis of Algorithms class.
This document contains code for implementing quicksort and mergesort algorithms in C++. It includes the code to perform the sorting, functions to print and swap array elements, and main functions to test the sorting algorithms. Quicksort uses partitioning to recursively sort arrays by picking a pivot element, and mergesort recursively divides arrays in half and then merges the sorted halves. The code samples were submitted as part of a final project for a Design and Analysis of Algorithms class.
#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); }