循序搜寻法(使用卫兵)
明
搜的目的,是在「已排序的料」中找指定的料,而中循序搜是最基本的搜法,只要料找到最後,看看是否找到料即可。
解法
初者看到循序搜,多都使用以下的方式行搜:
while(i < MAX) { if(number[i] == k) { printf("找到指定值"); break; } i++;}方法基本上有,但是可以加以改善,可以利用定兵的方式,省去if判式,兵通常定在列最後或是最前方,假定在列前方好了(索引0的位置),我列後方向前找,如果找到指定的料,其索引值不是0,表示在列走完之前就找到了,在程式的撰上,只要使用一while圈就可以了。
下面的程式了配合兵的置,自行使用快速排序法先生的列排序,然後才行搜,若只是字的,通常您可以使用程式言函式所提供的搜函式。
public class Search { public static int linear(int[] number, int des) { int[] tmp = new int[number.length + 1]; for(int i = 1; i < tmp.length; i++) { tmp[i] = number[i-1]; } tmp[0] = des; int i = number.length; while(tmp[i] != tmp[0]) i--; return i - 1; } public static void main(String[] args) { int[] number = {1, 2, 3, 4, 6, 7, 8}; int find = Search.linear(number, 3); System.out.println(find >= 0 ? "找到值於索引" + find : "找不到值"); }}