-
// 在數(shù)組 a 中宣蠕,查找 key,返回 key 所在的位置
// 其中甥捺,n 表示數(shù)組 a 的長度
int find(char* a, int n, char key) {
// 邊界條件處理抢蚀,如果 a 為空,或者 n<=0镰禾,說明數(shù)組中沒有數(shù)據(jù)皿曲,就不用 while 循環(huán)比較了
if(a == null || n <= 0) {
return -1;
}
int i = 0;
// 這里有兩個比較操作:i<n 和 a[i]==key.
while (i < n) {
if (a[i] == key) {
return i;
}
++i;
}
return -1;
}
-
// 在數(shù)組 a 中,查找 key吴侦,返回 key 所在的位置
// 其中屋休,n 表示數(shù)組 a 的長度
// 我舉 2 個例子,你可以拿例子走一下代碼
// a = {4, 2, 3, 5, 9, 6} n=6 key = 7
// a = {4, 2, 3, 5, 9, 6} n=6 key = 6
int find(char* a, int n, char key) {
if(a == null || n <= 0) {
return -1;
}
// 這里因?yàn)橐獙?a[n-1] 的值替換成 key备韧,所以要特殊處理這個值
if (a[n-1] == key) {
return n-1;
}
// 把 a[n-1] 的值臨時保存在變量 tmp 中劫樟,以便之后恢復(fù)。tmp=6。
// 之所以這樣做的目的是:希望 find() 代碼不要改變 a 數(shù)組中的內(nèi)容
char tmp = a[n-1];
// 把 key 的值放到 a[n-1] 中叠艳,此時 a = {4, 2, 3, 5, 9, 7}
a[n-1] = key;
int i = 0;
// while 循環(huán)比起代碼一奶陈,少了 i<n 這個比較操作
while (a[i] != key) {
++i;
}
// 恢復(fù) a[n-1] 原來的值, 此時 a= {4, 2, 3, 5, 9, 6}
a[n-1] = tmp;
if (i == n-1) {
// 如果 i == n-1 說明,在 0...n-2 之間都沒有 key附较,所以返回 -1
return -1;
} else {
// 否則吃粒,返回 i,就是等于 key 值的元素的下標(biāo)
return i;
}
}