1 // 在数组 a 中,查找 key,返回 key 所在的位置 2 // 其中,n 表示数组 a 的长度 3 int find(char* a, int n, char key) { 4 // 边界条件处理,如果 a 为空,或者 n<=0,说明数组中没有数据,就不用 while 循环比较了 5 if(a == null || n <= 0) { 6 return -1; 7 } 8 9 int i = 0; 10 // 这里有两个比较操作:i<n 和 a[i]==key. 11 while (i < n) { 12 if (a[i] == key) { 13 return i; 14 } 15 ++i; 16 } 17 18 return -1; 19 } 20
1 // 在数组 a 中,查找 key,返回 key 所在的位置 2 // 其中,n 表示数组 a 的长度 3 // 我举 2 个例子,你可以拿例子走一下代码 4 // a = {4, 2, 3, 5, 9, 6} n=6 key = 7 5 // a = {4, 2, 3, 5, 9, 6} n=6 key = 6 6 int find(char* a, int n, char key) { 7 if(a == null || n <= 0) { 8 return -1; 9 } 10 11 // 这里因为要将 a[n-1] 的值替换成 key,所以要特殊处理这个值 12 if (a[n-1] == key) { 13 return n-1; 14 } 15 16 // 把 a[n-1] 的值临时保存在变量 tmp 中,以便之后恢复。tmp=6。 17 // 之所以这样做的目的是:希望 find() 代码不要改变 a 数组中的内容 18 char tmp = a[n-1]; 19 // 把 key 的值放到 a[n-1] 中,此时 a = {4, 2, 3, 5, 9, 7} 20 a[n-1] = key; 21 22 int i = 0; 23 // while 循环比起代码一,少了 i<n 这个比较操作 24 while (a[i] != key) { 25 ++i; 26 } 27 28 // 恢复 a[n-1] 原来的值, 此时 a= {4, 2, 3, 5, 9, 6} 29 a[n-1] = tmp; 30 31 if (i == n-1) { 32 // 如果 i == n-1 说明,在 0...n-2 之间都没有 key,所以返回 -1 33 return -1; 34 } else { 35 // 否则,返回 i,就是等于 key 值的元素的下标 36 return i; 37 } 38 }
原文:https://www.cnblogs.com/huangguoming/p/10548571.html