当前位置: 首页>>算法&结构>>正文


调整整数数组的元素,使偶数在左半部分,奇数在右半部分,时间复杂度O(N)

题目比较简单,但是这里采用的一次遍历方法还是比较通用的。

设:

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;

}
本文由《纯净天空》出品。文章地址: https://vimsky.com/article/375.html,未经允许,请勿转载。