供自己或有需要的朋友查询参考。
博客内容为自我总结而来,所以描述皆按本人理解,如有错误请帮忙指出来谢谢。
1.顺序查找(线形查找)
属于无序查找算法。从表的某端开始,按顺序进行查找。
查找成功时的平均查找长度为: ASL = 1/n(1+2+3+…+n) = (n+1)/2 。
时间复杂度为O(n)。
使用代码来理解
//a[]为要查询的表,key为要查询的值,n表示查询表内元素的个数
int SequenceSearch(int a[], int key, int n){
for(int i = 0; i < n; ++i){
if(a[i] == key){
return i;
}
}
return -1;
}
2.二分查找(折半查找)
属于有序查找算法。
时间复杂度:O(log2n)
实现:将数组折半,然后将中间那个数(a[mid])与要查找的值(key)进行对比。是输出,否,再与要查找的数(key)进行大小对比(判断下一次折半的是哪一边的表)。大的话,将最大下标(high)降为:折半下标(mid)-1.小的话,将最小下标(low)升为:折半下标(mid)+1(因为中间那数已经对比过,所以