调整数组的奇偶,杨氏矩阵中数的查找

1、调整数组使奇数全部都位于偶数前面。
简单思路:
给出一个数组,判断数组中元素的奇偶性,从数组的两端分别开始判断,每判断一次左端+1,右端-1,当左端的值小于右端时,循环打印结果。
代码如下:

#include<stdio.h>
int main()
{
    int i = 0;
    int arr[10]={1,2,3,4,5,6,7,8,9,0};
    int sz = sizeof(arr)/sizeof(arr[0]);
    int left = 0;
    int right = sz-1;
    while(left<right)
    {
        while((left<right) && (arr[left]%2 ==1))
        {
            left++;
        }
        while((left<right) && (arr[right]%2 == 0))
        {
            right--;
        }
        if(left<right)
        {
            int tmp = arr[left];
            arr[left] = arr[right];
            arr[right] = tmp;
        }
    }
    for(i=0; i<sz; i++)
    {
        printf("%d ",arr[i]);
    }
    return 0;
}

输出结果:
这里写图片描述
2、有一个二维数组,数组的每行从左到右是递增的,每列从上到下是递增的,在这样的数组中查找一个数字是否存在。
简单思路如下:
在查找数字是否存在时,可以先在数组中找出一个数,根据它与要查找的数的大小比较逐步确定要查找的数的位置。这样的话,一开始在数组中选取的数就很重要。在对杨氏矩阵数组进行分析以后我们可以发现:在杨氏矩阵中,左上角是它的最小数,右下角是它的最大数,所以选取这两个位置的数并没有太大的意义。故此可以看一下左下角或右上角,发现这两个位置的数有比较的价值,则可以以这两个位置中的任何一个数为比较的基准。
这里写图片描述
代码如下:

#include<stdio.h>
int Find(int arr[3][3], int *px, int *py, int k)
{
    int x = 0;
    int y = *py-1;
    while((x<*px) && (y>=0))
    {
        if(arr[x][y]<k)
        {
            x++;
        }
        else if(arr[x][y]>k)
        {
            y--;
        }
        else
        {
            *px = x + 1;
            *py = y + 1;
            return 1;
        }
    }
    *px = -1;
    *py = -1;
    return 0;
}
int main()
{
    int arr[3][3] = {1,2,3,4,5,6,7,8,9};
    int k = 0;
    int x = 3;
    int y = 3;
    printf("请输入要查找的数:");
    scanf("%d",&k); 
    int ret = Find(arr, &x, &y, k);
    printf("横坐标为:%d 纵坐标为:%d\n", x, y);
    return 0;
}

输出结果:
这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值