| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
 100
 101
 102
 103
 104
 105
 106
 107
 108
 109
 110
 111
 112
 113
 114
 115
 116
 117
 118
 119
 120
 121
 122
 123
 124
 125
 126
 127
 128
 129
 130
 131
 132
 133
 134
 
 | // FindInPartiallySortedMatrix.cpp : Defines the entry point for the console application.//
 
 // 《剑指Offer——名企面试官精讲典型编程题》代码
 // 著作权所有者:何海涛
 
 #include "stdafx.h"
 
 // 二维数组matrix中,每一行都从左到右递增排序,
 // 每一列都从上到下递增排序
 bool Find(int* matrix, int rows, int columns, int number)
 {
 bool found = false;
 
 if(matrix != NULL && rows > 0 && columns > 0)
 {
 int row = 0;
 int column = columns - 1;
 while(row < rows && column >=0)
 {
 if(matrix[row * columns + column] == number)
 {
 found = true;
 break;
 }
 else if(matrix[row * columns + column] > number)
 -- column;
 else
 ++ row;
 }
 }
 
 return found;
 }
 
 // ====================测试代码====================
 void Test(char* testName, int* matrix, int rows, int columns, int number, bool expected)
 {
 if(testName != NULL)
 printf("%s begins: ", testName);
 
 bool result = Find(matrix, rows, columns, number);
 if(result == expected)
 printf("Passed.\n");
 else
 printf("Failed.\n");
 }
 
 //  1   2   8   9
 //  2   4   9   12
 //  4   7   10  13
 //  6   8   11  15
 // 要查找的数在数组中
 void Test1()
 {
 int matrix[][4] = {{1, 2, 8, 9}, {2, 4, 9, 12}, {4, 7, 10, 13}, {6, 8, 11, 15}};
 Test("Test1", (int*)matrix, 4, 4, 7, true);
 }
 
 //  1   2   8   9
 //  2   4   9   12
 //  4   7   10  13
 //  6   8   11  15
 // 要查找的数不在数组中
 void Test2()
 {
 int matrix[][4] = {{1, 2, 8, 9}, {2, 4, 9, 12}, {4, 7, 10, 13}, {6, 8, 11, 15}};
 Test("Test2", (int*)matrix, 4, 4, 5, false);
 }
 
 //  1   2   8   9
 //  2   4   9   12
 //  4   7   10  13
 //  6   8   11  15
 // 要查找的数是数组中最小的数字
 void Test3()
 {
 int matrix[][4] = {{1, 2, 8, 9}, {2, 4, 9, 12}, {4, 7, 10, 13}, {6, 8, 11, 15}};
 Test("Test3", (int*)matrix, 4, 4, 1, true);
 }
 
 //  1   2   8   9
 //  2   4   9   12
 //  4   7   10  13
 //  6   8   11  15
 // 要查找的数是数组中最大的数字
 void Test4()
 {
 int matrix[][4] = {{1, 2, 8, 9}, {2, 4, 9, 12}, {4, 7, 10, 13}, {6, 8, 11, 15}};
 Test("Test4", (int*)matrix, 4, 4, 15, true);
 }
 
 //  1   2   8   9
 //  2   4   9   12
 //  4   7   10  13
 //  6   8   11  15
 // 要查找的数比数组中最小的数字还小
 void Test5()
 {
 int matrix[][4] = {{1, 2, 8, 9}, {2, 4, 9, 12}, {4, 7, 10, 13}, {6, 8, 11, 15}};
 Test("Test5", (int*)matrix, 4, 4, 0, false);
 }
 
 //  1   2   8   9
 //  2   4   9   12
 //  4   7   10  13
 //  6   8   11  15
 // 要查找的数比数组中最大的数字还大
 void Test6()
 {
 int matrix[][4] = {{1, 2, 8, 9}, {2, 4, 9, 12}, {4, 7, 10, 13}, {6, 8, 11, 15}};
 Test("Test6", (int*)matrix, 4, 4, 16, false);
 }
 
 // 鲁棒性测试,输入空指针
 void Test7()
 {
 Test("Test7", NULL, 0, 0, 16, false);
 }
 
 int _tmain(int argc, _TCHAR* argv[])
 {
 Test1();
 Test2();
 Test3();
 Test4();
 Test5();
 Test6();
 Test7();
 
 return 0;
 }
 
 
 
 |