Update dnf-sort.cpp

pull/1124/head
Ansh Tripathi 2023-01-01 18:16:58 +05:30 committed by GitHub
parent c63ec9ee47
commit cb36b08146
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 19 additions and 10 deletions

View File

@ -1,6 +1,11 @@
// C++ program to sort an array
// with 0, 1 and 2 using dnf sort which also stands for “Dutch National Flag algorithm”
#include <bits/stdc++.h> #include <bits/stdc++.h>
using namespace std; using namespace std;
// Function to sort the input array, // Function to sort the input array,
// the array is assumed // the array is assumed
// to have values in {0, 1, 2} // to have values in {0, 1, 2}
@ -9,22 +14,22 @@ void sort012(int a[], int arr_size)
int lo = 0; int lo = 0;
int hi = arr_size - 1; int hi = arr_size - 1;
int mid = 0; int mid = 0;
// Iterate till all the elements // Iterate till all the elements
// are sorted // are sorted
while (mid <= hi) { while (mid <= hi) {
switch (a[mid]) { switch (a[mid]) {
// If the element is 0 // If the element is 0
case 0: case 0:
swap(a[lo++], a[mid++]); swap(a[lo++], a[mid++]);
break; break;
// If the element is 1 . // If the element is 1 .
case 1: case 1:
mid++; mid++;
break; break;
// If the element is 2 // If the element is 2
case 2: case 2:
swap(a[mid], a[hi--]); swap(a[mid], a[hi--]);
@ -32,7 +37,7 @@ void sort012(int a[], int arr_size)
} }
} }
} }
// Function to print array arr[] // Function to print array arr[]
void printArray(int arr[], int arr_size) void printArray(int arr[], int arr_size)
{ {
@ -40,16 +45,20 @@ void printArray(int arr[], int arr_size)
for (int i = 0; i < arr_size; i++) for (int i = 0; i < arr_size; i++)
cout << arr[i] << " "; cout << arr[i] << " ";
} }
// Driver Code // Driver Code
int main() int main()
{ {
int arr[] = { 0, 1, 1, 0, 1, 2, 1, 2, 0, 0, 0, 1 }; int arr[] = { 0, 1, 1, 0, 1, 2, 1, 2, 0, 0, 0, 1 };
int n = sizeof(arr) / sizeof(arr[0]); int n = sizeof(arr) / sizeof(arr[0]);
sort012(arr, n); sort012(arr, n);
printArray(arr, n); printArray(arr, n);
return 0; return 0;
} }
// Time Complexity: O(n), Only one traversal of the array is needed.
// Space Complexity: O(1), No extra space is required.