杨氏矩阵(二维数组的每行从左到右是递增的,每列从上到下是递增的. 在这样的数组中查找一个数字)
题目要求时间复杂度小于O(N)
#include<stdio.h>int find(int arr[][3], int *px, int *py,int key){ int x = 0; int y = *py - 1; while ((x < *px) && (y >= 0)) { if (arr[x][y] == key) { //下标由指针带回 *px = x; *py = y; return 0; } else if (arr[x][y] < key) { x++; } else { x++; y--; } } *px = -1; *py = -1;}void print_Arrs(int *arr,int row, int col)//输出函数(指针法)得益于c语言线性存储{ int i = 0; int j = 0; for (i = 0; i < row; i++) { for (j = 0; j < col; j++) { printf("%d ", arr[i*col + j]); } printf("\n"); }}int main(){ int n; int arr[3][3] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; print_Arrs((int *)arr, 3, 3); int x = 3; int y = 3; printf("请输入需要查找的数字:\n"); scanf("%d", &n); find(arr,&x,&y,n); if (x != -1 && y != -1) { printf("找到了,下标为%d,%d\n",x,y); } else { printf("没找到!\n"); } return 0;}
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。