二维数组查找&一维数组转换

1。
输入一个整数数组,实现一个函数,来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分,所有偶数位于数组的后半部分。

#include <stdio.h>
#include <string.h>
#include <assert.h>
void array_printf (int arr[],int len)
{
    int i=0;
    for(i=0;i<len;i++)
    {
        printf("%d ",arr[i]);
    }
    printf("\n");
}
void Swap(int *left,int *right)
{

    while(left<right)
    {
        char tmp ;
        tmp = *left;
        *left = *right;
        *right = tmp;
        left++;
        right--;
    }
}
void odd_even_swap(int arr[],int len)
{

    int *start = arr;
    int *end = (arr+len-1);
    assert(arr);
    assert(len);
    while(start<end)
    {
        if((!(*start & 1))&&(*end & 1))
        {
            Swap(start,end);
            start++;
            end--;
            continue;
        }
        if(*start & 1)
        {
            start++;
        }
        if(!( *end & 1))
        {
            end--;
        }
    }
}


int main()
{
    int j=0;
    int arr[]={1,2,3,0,6,7,8,9,11,5};
    int size = sizeof(arr)/sizeof(arr[0]);
    odd_even_swap(arr,size);
    array_printf(arr,size);
    return 0;
}

2。
有一个二维数组,数组的每行从左到右是递增的,每列从上到下是递增的.在这样的数组中查找一个数字是否存在。 时间复杂度小于O(N);

#include <stdio.h>
int find_yang(int arr[][3],int row,int col,int data)
{
    int i=0;
    int j=col-1;
    if(data<arr[0][0] || data >arr[row-1][col-1])
    {
        return 0;
    }
    while (i<row && j>0 )
    {
        if(arr[i][j]<data)
        {
            i++;
        }else if(arr[i][j]>data)
        {
            j--;
        }else
        {
            return 1;
        }
    }
    return 0;
}
int main ()
{
    int num =0;
    int arr[3][3]={1,2,3,3,5,6,7,8,9};
    int s=0;
    scanf("%d",&num);
    s=find_yang(arr,3,3,num);
    if(s==1)
    {
        printf("%d is exist\n",num);
    }
    else
    {
        printf("%d is not exist\n",num);
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/romantic_c/article/details/79469501
今日推荐