楊氏矩陣(二維數組的每行從左到右是遞增的,每列從上到下是遞增的. 在這樣的數組中查找一個數字)
阿新 • • 發佈:2019-04-28
row stdio.h 線性 數字 %d scan -- else if for 題目要求時間復雜度小於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; }
楊氏矩陣(二維數組的每行從左到右是遞增的,每列從上到下是遞增的. 在這樣的數組中查找一個數字)