1. 程式人生 > >在楊氏矩陣中查找一個數字是否存在

在楊氏矩陣中查找一個數字是否存在

ont class size color can 維數 個數 輸入 這一

楊氏矩陣

有一個二維數組. 數組的每行從左到右是遞增的,每列從上到下是遞增的.

在這樣的數組中查找一個數字是否存在。 時間復雜度小於O(N);

數組:

1 2 3      1 3 4      1 2 3

2 3 4      2 4 5      4 5 6

3 4 5     4 5 6      7 8 9

 1 #include<stdio.h>
 2 
 3 #define ROW 3
 4 #define COL 3
 5 
 6 int Find_num(int arr[ROW][COL],int num)
7 { 8 //從右上角開始查詢 9 int row = 0; 10 int col = COL - 1; 11 while (row < ROW && col<COL) 12 { 13 if (arr[row][col] > num) 14 { 15 //查詢左邊的數 16 --col; 17 } 18 if (arr[row][col] < num) 19 { 20 //查詢下一行
21 ++row; 22 } 23 if (arr[row][col] == num) 24 { 25 break; 26 } 27 } 28 if (arr[row][col] == num) 29 { 30 return 1; 31 } 32 else 33 { 34 return 0; 35 } 36 } 37 38 int main() 39 { 40 //要求時間復雜度小於=O(N),則可以利用楊氏矩陣的一些特性
41 //如果將每一個都數都查找一遍,則最長時間應該為O(row * col) 42 //如果利用每行從左到右是遞增的,每列從上到下是遞增的這一性質則為O(row + col) 43 int arr[ROW][COL] = { 1,2,3,3,4,5,4,5,6}; 44 int num = 0; 45 while (1) 46 { 47 printf("請輸入您要查找的數字:\n"); 48 scanf("%d", &num); 49 int find_num = Find_num(arr, num); 50 if (find_num == 0) 51 { 52 printf("數字不存在!\n"); 53 } 54 else 55 { 56 printf("數字存在!"); 57 } 58 59 } 60 61 return 0; 62 }

在楊氏矩陣中查找一個數字是否存在