• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

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

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

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

设:

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;

}

鲜花

握手

雷人

路过

鸡蛋
专题导读
上一篇:
快排序的非递归实现(原创)发布时间:2022-05-14
下一篇:
拓扑排序算法(邻接矩阵版)(C++实现)发布时间:2022-05-14
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap