How to move all negative elements to the end of array in C

2 Answers

0 votes
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void move_negative_to_end(int arr[], int size) { 
    int *temp = malloc(sizeof(int) * size);

    int j = 0; 
    for (int i = 0; i < size ; i++) 
        if (arr[i] >= 0 ) 
            temp[j++] = arr[i]; 
  
    if (j == size || j == 0) 
        return; 
  
    for (int i = 0 ; i < size ; i++) 
        if (arr[i] < 0) 
            temp[j++] = arr[i]; 

    for (int i = 0; i < size; i++) 
       arr[i] = temp[i];

    free(temp);
} 
  
int main() 
{ 
    int arr[] = { -1, 8, -21, -3, -2, 7, 15, -30, -40, 4, 6, 9 }; 
    int size = sizeof(arr)/sizeof(arr[0]); 
  
    move_negative_to_end(arr, size); 
  
    for (int i = 0; i < size; i++) 
       printf("%d ", arr[i]);
  
    return 0; 
} 





/*
run:
 
8 7 15 4 6 9 -1 -21 -3 -2 -30 -40 
 
*/

 



answered Nov 2, 2021 by avibootz
0 votes
#include <stdio.h>

void move_negative_to_end(int arr[], int size) { 
    int j = 0;
    for (int i = 0; i < size; i++) {
        if (arr[i] >= 0) {
            int tmp = arr[i];
            arr[i] = arr[j];
            arr[j] = tmp;
            j++;
        }
    }
} 
   
int main() 
{ 
    int arr[] = { -1, 8, -21, -3, -2, 7, 15, -30, -40, 4, 6, 9 }; 
    int size = sizeof(arr)/sizeof(arr[0]); 
   
    move_negative_to_end(arr, size); 
   
    for (int i = 0; i < size; i++) 
       printf("%d ", arr[i]);
   
    return 0; 
} 
 
 
 
 
 
/*
run:
  
8 7 15 4 6 9 -21 -30 -40 -3 -2 -1 
  
*/

 



answered Nov 4, 2021 by avibootz

Related questions

1 answer 147 views
2 answers 180 views
2 answers 171 views
2 answers 153 views
2 answers 174 views
...