- 杨氏矩阵:数组的每一行从左到右递增
数组的每一列从上到下递增
在该数组中查找一个数字.(返回该数字的坐标)如:
1 3 5
2 4 7
4 5 9
#include <stdio.h>
#include <stdlib.h>
//从左下角开始寻找:(递归的方法)
int Rearch_r(int a[3][3],int roe,int col,int k,int x,int y,int *px,int *py)
{
if (x<0||y>=col)
{
*px=-1;
*py=-1;
return 0;
}
if (a[x][y]]==k)
{
*px=x;
*py=y;
return 1;
}
else if (a[x][y]>k)
{
Rearch_r(a,3,3,9,x-1,y,*px,*py);
}
else if (a[x][y]<k)
{
Rearch_r(a,3,3,9,x,y+1,*px,*py);
}
}
int main ( )
{
int a[3][3]={2,5,6,8,5,9,1,0,3};
Rearch_r(a,3,3,9,2,0,&px,&py); //2,0 表示左下角的坐标,即从左下角开始寻找。
printf ("%d %d\n",px,py);
return 0;
}
//从右上角开始寻找:
int Rearch (int a[3][3],int row,int col,int k,int *px,int *py)
{
int i=0;
int j=col-1;
while (i<row&&j>=0)
{
if (a[i][j]==k)
{
*px=i;
*py=j;
return 1;
}
else if (a[i][j]>k)
{
j--;
}
else
{
i++;
}
}
*px=-1;
*py=-1;
return 0;
}
int main ( )
{
int a[3][3]={2,5,6,8,5,9,1,0,3};
Rearch (arr,3,3,9,&px,&py);
printf ("%d %d\n",px,py);
return 0;
}
#include <stdio.h>
int main ( )
{
int arr[7] = {1,5,8,3,4,0,2};
int i = 0;
int j = 0;
while ( i<j )//保证在有效的范围内循环
{
while (i<j && (arr[i] % 2!=0))
{
i++; //寻找到第一个偶数
}
while (i<j && (arr[j] % 2!=1))
{
j++; //寻找到第一个奇数
}
if (i<j)
{
int tmp =arr[i];
arr[i]=arr[j];
arr[j]=tmp;
}
}
for (i=0;i<7;i++)
{
printf ("%d ",arr[i]);
}
printf ("\n");
return 0;
}