Initial commit
This commit is contained in:
73
cpp/programs/sort_quick.cpp
Normal file
73
cpp/programs/sort_quick.cpp
Normal file
@@ -0,0 +1,73 @@
|
||||
#include <iostream>
|
||||
using namespace std;
|
||||
|
||||
|
||||
int partition(int arr[], int start, int end) {
|
||||
int pivot = arr[start];
|
||||
|
||||
int count = 0;
|
||||
for (int i = start + 1; i <= end; i++) {
|
||||
if (arr[i] <= pivot){
|
||||
count++;
|
||||
}
|
||||
}
|
||||
|
||||
// Giving pivot element its correct position
|
||||
int pivotIndex = start + count;
|
||||
swap(arr[pivotIndex], arr[start]);
|
||||
|
||||
// Sorting left and right parts of the pivot element
|
||||
int i = start, j = end;
|
||||
|
||||
while (i < pivotIndex && j > pivotIndex) {
|
||||
while (arr[i] <= pivot) {
|
||||
// Find index of the first element from left that is higher than pivot
|
||||
i++;
|
||||
}
|
||||
|
||||
while (arr[j] > pivot) {
|
||||
// Find index of the first element from right that is lower than pivot
|
||||
j--;
|
||||
}
|
||||
|
||||
if (i < pivotIndex && j > pivotIndex) {
|
||||
swap(arr[i], arr[j]);
|
||||
i++;
|
||||
j--;
|
||||
}
|
||||
}
|
||||
|
||||
return pivotIndex;
|
||||
}
|
||||
|
||||
|
||||
void quickSort(int arr[], int low, int high) {
|
||||
if (low < high) {
|
||||
int pi = partition(arr, low, high);
|
||||
|
||||
quickSort(arr, low, pi - 1);
|
||||
quickSort(arr, pi + 1, high);
|
||||
}
|
||||
}
|
||||
// 4 1 3 5 2
|
||||
// 5 1 3 4 2
|
||||
// 2 1 3 4 5
|
||||
// 1 2 3 4 5
|
||||
|
||||
|
||||
|
||||
int main() {
|
||||
int N = 50;
|
||||
int arr[N];
|
||||
for (int i = 0; i < N; i++) {
|
||||
arr[i] = N - i;
|
||||
}
|
||||
|
||||
quickSort(arr, 0, N - 1);
|
||||
|
||||
for (int i = 0; i < N; i++) {
|
||||
cout << arr[i] << " ";
|
||||
}
|
||||
cout << endl;
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user