C語言陣列元素的查詢
阿新 • • 發佈:2018-11-19
對無序陣列的查詢
所謂無序陣列,就是陣列元素的排列沒有規律。無序陣列元素查詢的思路也很簡單,就是用迴圈遍歷陣列中的每個元素,把要查詢的值挨個比較一遍。請看下面的程式碼:
1 #include <stdio.h> 2 int main(){ 3 int nums[10] = {1, 10, 6, 296, 177, 23, 0, 100, 34, 999}; 4 int i, num, thisindex = -1; 5 6 printf("Input an integer: "); 7 scanf("%d", &num);8 for(i=0; i<10; i++){ 9 if(nums[i] == num){ 10 thisindex = i; 11 break; 12 } 13 } 14 if(thisindex < 0){ 15 printf("%d isn't in the array.\n", num); 16 }else{ 17 printf("%d is in the array, it's index is %d.\n", num, thisindex);18 } 19 20 return 0; 21 }
執行結果:
Input an integer: 100↙
100 is in the array, it's index is 7.
或者
Input an integer: 28↙
28 isn't in the array.
這段程式碼的作用是讓使用者輸入一個數字,判斷該數字是否在陣列中,如果在,就打印出下標。
第10~15行程式碼是關鍵,它會遍歷陣列中的每個元素,和使用者輸入的數字進行比較,如果相等就獲取它的下標並跳出迴圈。
注意:陣列下標的取值範圍是非負數,當 thisindex >= 0 時,該數字在陣列中,當 thisindex < 0 時,該數字不在陣列中,所以在定義 thisindex 變數時,必須將其初始化為一個負數。
對有序陣列的查詢
查詢無序陣列需要遍歷陣列中的所有元素,而查詢有序陣列只需要遍歷其中一部分元素。例如有一個長度為 10 的整型陣列,它所包含的元素按照從小到大的順序(升序)排列,假設比較到第 4 個元素時發現它的值大於輸入的數字,那麼剩下的 5 個元素就沒必要再比較了,肯定也大於輸入的數字,這樣就減少了迴圈的次數,提高了執行效率。
1 #include <stdio.h> 2 int main(){ 3 int nums[10] = {0, 1, 6, 10, 23, 34, 100, 177, 296, 999}; 4 int i, num, thisindex = -1; 5 6 printf("Input an integer: "); 7 scanf("%d", &num); 8 for(i=0; i<10; i++){ 9 if(nums[i] == num){ 10 thisindex = i; 11 break; 12 }else if(nums[i] > num){ 13 break; 14 } 15 } 16 if(thisindex < 0){ 17 printf("%d isn't in the array.\n", num); 18 }else{ 19 printf("%d is in the array, it's index is %d.\n", num, thisindex); 20 } 21 22 return 0; 23 }
與前面的程式碼相比,這段程式碼的改動很小,只增加了一個判斷語句,也就是 12~14 行。因為陣列元素是升序排列的,所以當 nums[i] > num 時,i 後邊的元素也都大於 num 了,num 肯定不在陣列中了,就沒有必要再繼續比較了,終止迴圈即可。