/*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++;
printf(" left=%d \n",left);
/* Decrement right index while we see 1 at right */
while(arr[right] == 1 && left < right)
right=right-1;
printf(" right=%d \n",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=right-1;
}
}
}
/* driver program to test */
int main()
{
int arr[] = {1,1, 1,0,0,0};
int arr_size = 6, i = 0;
segregate0and1(arr, arr_size);
printf("array after segregation ");
for(i = 0; i < 6; i++)
printf("%d ", arr[i]);
getchar();
return 0;
}
No comments :
Post a Comment