在杨氏矩阵中查找一个元素是否存在
杨氏矩阵即每一行均以递增顺序排列,每列从上到下也为递增顺序
方法一:数组
#include<stdio.h> #include<stdlib.h> #define COLS 3 #define ROWS 3 //要查找只要在找到右上角的元素和输入元素进行比较。如果右上角元素大,即可排除其他行,若小 //,则可排除本行,继续循环,用输入元素和右上角的元素进行比较 int find(int arr[][COLS], int rows, int cols,int key)//形参不分配空间,可以省略ROWS { int row = 0; int col = cols - 1; while ((row <= 2) && (col >= 0)) { if (arr[row][col] > key) { col--; } else if (arr[row][col] < key) { row++; } else { return 1; } } return -1; } int main() { int arr[ROWS][COLS] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; int ret; int key ; scanf("%d", &key); ret= find(arr, ROWS, COLS, key); if (ret == 1) printf("exist\n"); else if (ret == -1) printf("not exist\n"); system("pause"); return 0; }
方法二:结构体
#include<stdio.h> #include<stdlib.h> struct Ret { int row; int col; }; #define COLS 3 #define ROWS 3 struct Ret find(int arr[][COLS], int rows, int cols,int key)//形参不分配空间,可以省略ROWS { int row = 0; int col = cols - 1; struct Ret ret; while ((row <= 2) && (col >= 0)) { if (arr[row][col] > key) { col--; } else if (arr[row][col] < key) { row++; } else { ret.col=col; ret.row = row; return ret; } } ret.col = -1; ret.row = -1; return ret; } int main() { int arr[ROWS][COLS] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; struct Ret ret; int key ; scanf("%d", &key); ret= find(arr, ROWS, COLS, key); if (ret.col != -1) { printf("%d\n ", arr[ret.col][ret.row]); printf("exist\n"); } else if (ret.col == -1) printf("not exist\n"); system("pause"); return 0; }
本文出自 “无以伦比的暖阳” 博客,请务必保留此出处http://10797127.blog.51cto.com/10787127/1715611
原文地址:http://10797127.blog.51cto.com/10787127/1715611