题目比较简单,但是这里采用的一次遍历方法还是比较通用的。
设:
arr: 数组, size=N
i:记录上一次放置偶数的下一个位置, 初始i=0
j : 当前遍历数组的位置, 初始j=0
遍历一遍数组(j从0到N-1):如果arr[j]为偶数, 交换arr[j]和arr[i],并将i置为下一个位置,即有i++;
遍历完成时,调整也就完成了。
#include <stdio.h>
#include
#include
#include
#define MAX_ARR_SIZE 1024
//to swap two integers
void swapN(int *a, int *b){
int t = *a;
*a = *b;
*b = t;
}
//to generate an array randomly
void genArr(int arr[], int size){
srand(time(NULL));
for(int i = 0; i < size; ++i){
arr[i] = rand() % size;
}
}
//to alter the array, making the even numbers in the left of the array
void alterArr(int arr[], int size){
int m = 0;
for(int i = 0; i < size; ++i){
if(0 == arr[i] % 2){
swapN(arr + m, arr + i);
m++;
}
}
}
//to print array
void printArr(int arr[], int size){
for(int i = 0; i < size; ++i){
fprintf(stdout, "%d ", arr[i]);
}
fprintf(stdout, "\n");
}
//main
int main(int argc, char **argv){
int arr[MAX_ARR_SIZE];
int size = 0;
while(scanf("%d", &size)){
if(size > MAX_ARR_SIZE || size <= 0){
fprintf(stdout, "out of Array size!\n");
break;
}
genArr(arr, size);
printArr(arr, size);
alterArr(arr, size);
printArr(arr, size);
}
return 0;
}