/* 8.2.1 顺序表查找算法 顺序查找,a为数组,n为要查找的数组长度,key为要查找的关键词 */ int Sequential_Search(int *a, int n, int key) { int i; for(i = 1; i<=n; i++) { if(a[i] == key) return i; } return 0; } /* 8.3.2 顺序表查找优化 “哨兵”模式,防止数组越界,极大的提高速度,很厉害的,不要小瞧他 优化上边代码 a[i] 存在数组越界问题 这种在查找方向的尽头放置“哨兵”免去了在查找过程中每一次比较后都要判断查找位置是否 越界的小技巧,看似与原先差别不大,但在总数居较多时,效率提高很大, 是非常好的编码技巧。当然,“哨兵”也不一定就一定要在数组开始,也可以在末端。 */ int Sequential_Search2(int *a, int n, int key) { int i; //设置a[0]为关键字值,我们称之为“哨兵” a[0] = key; //循环从数组尾部开始 i=n; while(a[i] != key) { i--; } //返回0则说明查找失败 return i; }