From 69f9210c172ec88e17907cbf63b4dc6218530077 Mon Sep 17 00:00:00 2001 From: Ayaan Khan Date: Wed, 27 May 2020 18:17:28 +0530 Subject: [PATCH 1/5] Added documentation --- sorting/Quick Sort.cpp | 67 ------------------------------------------ sorting/quick_sort.cpp | 22 ++++++++++++-- 2 files changed, 19 insertions(+), 70 deletions(-) delete mode 100644 sorting/Quick Sort.cpp diff --git a/sorting/Quick Sort.cpp b/sorting/Quick Sort.cpp deleted file mode 100644 index 0b807898f..000000000 --- a/sorting/Quick Sort.cpp +++ /dev/null @@ -1,67 +0,0 @@ -/* C implementation QuickSort */ -#include -using namespace std; - -int partition(int arr[], int low, int high) -{ - int pivot = arr[high]; // pivot - int i = (low - 1); // Index of smaller element - - for (int j = low; j < high; j++) - { - // If current element is smaller than or - // equal to pivot - if (arr[j] <= pivot) - { - i++; // increment index of smaller element - int temp = arr[i]; - arr[i] = arr[j]; - arr[j] = temp; - } - } - int temp = arr[i + 1]; - arr[i + 1] = arr[high]; - arr[high] = temp; - return (i + 1); -} - -void quickSort(int arr[], int low, int high) -{ - if (low < high) - { - - int p = partition(arr, low, high); - - quickSort(arr, low, p - 1); - quickSort(arr, p + 1, high); - } -} - -void show(int arr[], int size) -{ - for (int i = 0; i < size; i++) - cout << arr[i] << "\n"; -} - -// Driver program to test above functions -int main() -{ - int size; - cout << "\nEnter the number of elements : "; - - cin >> size; - - int arr[size]; - - cout << "\nEnter the unsorted elements : "; - - for (int i = 0; i < size; ++i) - { - cout << "\n"; - cin >> arr[i]; - } - quickSort(arr, 0, size); - cout << "Sorted array\n"; - show(arr, size); - return 0; -} diff --git a/sorting/quick_sort.cpp b/sorting/quick_sort.cpp index 12ee66456..5a568014d 100644 --- a/sorting/quick_sort.cpp +++ b/sorting/quick_sort.cpp @@ -1,16 +1,33 @@ -/* +/** * * copyright The Algorithms * Author - * Correction - ayaankhan98 * + * Implementation Details - + * Quick Sort is a divide and conquer algorithm. It picks and element as + * pivot and partition the given array around the picked pivot. There + * are many different versions of quickSort that pick pivot in different + * ways. + * + * 1. Always pick the first element as pivot + * 2. Always pick the last element as pivot (implemented below) + * 3. Pick a random element as pivot + * 4. Pick median as pivot + * + * The key process in quickSort is partition(). Target of partition is, + * given an array and an element x(say) of array as pivot, put x at it's + * correct position in sorted array and put all smaller elements (samller + * than x) before x, and put all greater elements (greater than x) after + * x. All this should be done in linear time + * */ #include #include int partition(int arr[], int low, int high) { - int pivot = arr[high]; // pivot + int pivot = arr[high]; // taking the last element as pivot int i = (low - 1); // Index of smaller element for (int j = low; j < high; j++) { @@ -44,7 +61,6 @@ void show(int arr[], int size) { } // Driver program to test above functions - int main() { int size; std::cout << "\nEnter the number of elements : "; From c1764bd1970031f153fa0f5f2456565706b31d94 Mon Sep 17 00:00:00 2001 From: Ayaan Khan Date: Wed, 27 May 2020 18:43:57 +0530 Subject: [PATCH 2/5] Added breif comments on functions --- sorting/quick_sort.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/sorting/quick_sort.cpp b/sorting/quick_sort.cpp index 5a568014d..965d117cc 100644 --- a/sorting/quick_sort.cpp +++ b/sorting/quick_sort.cpp @@ -26,6 +26,12 @@ #include #include +/* This function takes last element as pivot, places +the pivot element at its correct position in sorted +array, and places all smaller (smaller than pivot) +to left of pivot and all greater elements to right +of pivot */ + int partition(int arr[], int low, int high) { int pivot = arr[high]; // taking the last element as pivot int i = (low - 1); // Index of smaller element @@ -46,6 +52,10 @@ int partition(int arr[], int low, int high) { return (i + 1); } +/* The main function that implements QuickSort +arr[] --> Array to be sorted, +low --> Starting index, +high --> Ending index */ void quickSort(int arr[], int low, int high) { if (low < high) { int p = partition(arr, low, high); @@ -54,6 +64,7 @@ void quickSort(int arr[], int low, int high) { } } +// prints the array after sorting void show(int arr[], int size) { for (int i = 0; i < size; i++) std::cout << arr[i] << " "; From 50d6a14b2a40eb5185bc1858951e14441519e954 Mon Sep 17 00:00:00 2001 From: Ayaan Khan Date: Wed, 27 May 2020 18:48:22 +0530 Subject: [PATCH 3/5] modified comment block --- sorting/quick_sort.cpp | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/sorting/quick_sort.cpp b/sorting/quick_sort.cpp index 965d117cc..08db9c92e 100644 --- a/sorting/quick_sort.cpp +++ b/sorting/quick_sort.cpp @@ -26,11 +26,14 @@ #include #include -/* This function takes last element as pivot, places -the pivot element at its correct position in sorted -array, and places all smaller (smaller than pivot) -to left of pivot and all greater elements to right -of pivot */ +/** + * This function takes last element as pivot, places + * the pivot element at its correct position in sorted + * array, and places all smaller (smaller than pivot) + * to left of pivot and all greater elements to right + * of pivot + * + * */ int partition(int arr[], int low, int high) { int pivot = arr[high]; // taking the last element as pivot @@ -52,10 +55,12 @@ int partition(int arr[], int low, int high) { return (i + 1); } -/* The main function that implements QuickSort -arr[] --> Array to be sorted, -low --> Starting index, -high --> Ending index */ +/** + * The main function that implements QuickSort + * arr[] --> Array to be sorted, + * low --> Starting index, + * high --> Ending index +*/ void quickSort(int arr[], int low, int high) { if (low < high) { int p = partition(arr, low, high); From fb1d69fb1410b092ba66cf53fd473a1473f50d3d Mon Sep 17 00:00:00 2001 From: Ayaan Khan Date: Wed, 27 May 2020 18:51:05 +0530 Subject: [PATCH 4/5] further improved comment blocks --- sorting/quick_sort.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/sorting/quick_sort.cpp b/sorting/quick_sort.cpp index 08db9c92e..d067fa068 100644 --- a/sorting/quick_sort.cpp +++ b/sorting/quick_sort.cpp @@ -27,13 +27,13 @@ #include /** - * This function takes last element as pivot, places - * the pivot element at its correct position in sorted - * array, and places all smaller (smaller than pivot) - * to left of pivot and all greater elements to right - * of pivot + * This function takes last element as pivot, places + * the pivot element at its correct position in sorted + * array, and places all smaller (smaller than pivot) + * to left of pivot and all greater elements to right + * of pivot * - * */ + */ int partition(int arr[], int low, int high) { int pivot = arr[high]; // taking the last element as pivot From 326b3037b4d97d2624fef320d190a93aa71266c5 Mon Sep 17 00:00:00 2001 From: Ayaan Khan Date: Wed, 27 May 2020 22:39:19 +0530 Subject: [PATCH 5/5] free dynamically allocated memory --- sorting/quick_sort.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/sorting/quick_sort.cpp b/sorting/quick_sort.cpp index d067fa068..e09ad184c 100644 --- a/sorting/quick_sort.cpp +++ b/sorting/quick_sort.cpp @@ -89,5 +89,6 @@ int main() { quickSort(arr, 0, size-1); std::cout << "Sorted array : "; show(arr, size); + delete [] arr; return 0; }