數組查找
數組查找操作
查找數組中的值可通過比較數組的值與指定值來實現,此操作有以下幾種實現方式:
線性或者序列查找
線性查找算法通過序列迭代的方式從數組中查找指定的值,直到找到或者迭代結束位置。
當數組元素列表爲無序數組並且只執行一次查找時,使用線性查找是最好的方式。其時間複雜度依賴於數組的大小。
線性查找時間複雜度:
int main(){
int array[100],search,c,n;
printf("輸入輸入的長度");
scanf("%d",&n);
printf("輸入的數值爲 %d",n);
//爲數組元素賦值
for (c=0;c<n;c++){
scanf("%d",&array[c]);
}
printf("輸入要在數組中查找的值");
scanf("%d",&search);
for(c=0;c<n;c++){
if (array[c]==search){
printf("%d 查找的值位於索引 %d\n",serach,c+1);
break;
}
}
if (c==n){
printf("%d 數組中不存在要查找的值",search);
}
return 0;
}
時間複雜度
- 平均:O(n)
- 最好:O(1)
- 最差:O(n)
平均時間複雜度爲O(n)時,可能查找的元素位於元素表末尾或者數組中不存在,線性查找需要遍歷每個元素值,直到找到爲止。查找算法的時間複雜度最佳和最壞情況分別爲O(1)和O(n),因爲在第一次迭代或者在最後一次迭代時才能找到要搜索的元素。
二分查找
線性查找有一個較大的缺點,在較大的數組中查找元素時,將導致時間複雜度上升,隨着數組的增長,時間複雜度呈線性增長。在某些情況下,可以使用二分查找解決這個問題。
二分查找類似於我們查找書中一個特定的頁碼。我們在中間隨機打開書的一頁,把搜索範圍縮小到書的左邊或者右邊,當頁碼有序的情況下,這個操作最終能找到目標頁碼。
二分查找時間複雜度:O(log n)
int main(){
int c,first,last,middle,n,search,array[100];
printf("輸入數組元素的數量");
scanf("%d",&n);
printf("輸入數量爲%d的有序數組",n);
for (c=0;c<n;c++{
scanf("%d",&array[c]);
})
printf("輸入要查找的值");
scanf("%d",&search);
first=0;
last=n-1;
middle=(first+last)/2;
while(first<+last){
if (array[middle]<search>){
first=middle+1;
}else if (array[middle]==search){
printf("查找的元素 %d 索引位置爲 %d \n",search,middle+1);
}else{
last=middle-1;
}
middle=(first+last)/2;
}
if (first>last)
pintf("未能在數組中查找到目標元素: %d",serach);
return 0;
}
更多內容,歡迎關注: