當前位置: 首頁>>算法&結構>>正文


調整整數數組的元素,使偶數在左半部分,奇數在右半部分,時間複雜度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/zh-tw/article/375.html,未經允許,請勿轉載。