Suppose you are given an unsorted array where each element i
Solution
1)
Worst case of Quick Sort: O(n^2)
Worst case occurs in Qiick Sort , we always pick largest (or smallest) element as pivot elment.
So, in this case, array is divided in two parts : one part contains one element and other part contains (n-1) elements.
2)
given arr[0...n-1] => contains 0 or 1
Use two indexes to traverse
Maintain two indexes. Initialize first index left as 0 and second index right as n-1.
Do following while left < right
a) Keep incrementing index left while there are 0s at it
b) Keep decrementing index right while there are 1s at it
c) If left < right then exchange arr[left] and arr[right]
/*Function to put all 0s on left and all 1s on right*/
void segregate0and1(int arr[], int size)
{
/* Initialize left and right indexes */
int left = 0, right = size-1;
while (left < right)
{
/* Increment left index while we see 0 at left */
while (arr[left] == 0 && left < right)
left++;
/* Decrement right index while we see 1 at right */
while (arr[right] == 1 && left < right)
right--;
/* If left is smaller than right then there is a 1 at left
and a 0 at right. Exchange arr[left] and arr[right]*/
if (left < right)
{
arr[left] = 0;
arr[right] = 1;
left++;
right--;
}
}
}
