-
Notifications
You must be signed in to change notification settings - Fork 14
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #4 from ramvikrams/QSA
quickSort algorithm in c++
- Loading branch information
Showing
1 changed file
with
80 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,80 @@ | ||
// Quick sort in C++ | ||
|
||
#include <iostream> | ||
using namespace std; | ||
|
||
// function to swap elements | ||
void swap(int *a, int *b) { | ||
int t = *a; | ||
*a = *b; | ||
*b = t; | ||
} | ||
|
||
// function to print the array | ||
void printArray(int array[], int size) { | ||
int i; | ||
for (i = 0; i < size; i++) | ||
cout << array[i] << " "; | ||
cout << endl; | ||
} | ||
|
||
// function to rearrange array (find the partition point) | ||
int partition(int array[], int low, int high) { | ||
|
||
// select the rightmost element as pivot | ||
int pivot = array[high]; | ||
|
||
// pointer 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); | ||
} | ||
} | ||
|
||
// Driver 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); | ||
} |