題目比較簡單,但是這裏采用的一次遍曆方法還是比較通用的。
設:
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;
}