数组中奇偶元素分离算法

来源:互联网 发布:顶级域名的两大类 编辑:程序博客网 时间:2024/06/06 03:58

数组中奇偶元素分离算法

原问题:

已知数组A[n]的元素类型为int。设计算法将其调整为左右两部分,左边所有元素为奇数,右边所有元素为偶数,并要求算法的时间复杂度为O(n)。

我的解法:

@ZYT#include <stdio.h>/***********************交换分割数组:    头指针、尾指针定位    当左指针<右指针时        情况1:(奇数-偶数)0-1对            left++;right--;break;        情况2:(偶数-奇数)1-0对            swap;            left++;right--;break;        情况3:(偶数-偶数)1-1对            right--;break;        情况4:(奇数-奇数)0-0对            left++;break;**********************************/void swap(int *x, int *y){    int t = *x;    *x = *y;    *y = t;}int judgePair(int a, int b){    if (!a && b) return 1;    if ( a &&!b) return 2;    if ( a && b) return 3;    if (!a &&!b) return 4;}int isEven(int n)//isOdd{    if(n!=0)        return !(n%2);    return 1;}void DivideArray(int* a, int length){    int *left, *right;    left = right = a;    right += length - 1;    while (left < right) {        switch (judgePair(isEven(*left), isEven(*right))) {            case 1:                left++;right--;break;            case 2:                swap(left, right);                left++;right--;break;            case 3:                right--;break;            case 4:                left++;break;            default:                printf("ERR!");        }    }}int main(){    int array[10] = {        0,1,2,3,4,5,6,7,8,9    };    for (int i = 0; i != 10; ++i)        printf("pre: %d\n", array[i]);    printf("-----------\n");    DivideArray(array, 10);    for (int i = 0; i != 10; ++i)        printf("cur: %d\n", array[i]);    return 0;}
1 0