順序查找改進算法
順序查找,最簡單的一種查找方法。其基本思想是:從線性表的一端開始,依次將每個記錄的關鍵字與給定值進行比較。若某個記錄的給定值等于給定值,則表示查找成功并返回記錄序號;若將線性表中的記錄查找完仍然沒有找到關鍵字,則表示查找失敗,返回一失敗值。</span>
傳統的順序查找針對的線性表中的元素不允許存在元素相同的情況,并且其查找方式:for(j = 0 ; j< source.length && source[j] != key; j++)中的這段代碼:</span> j< source.length && source[j] != key 每循環一次都要進行兩次比較.如果線性表中的數據較多,則查找需要很長的時間,程序效率會顯著降低。但是我們可以對以上兩點進行改進。在線性表的末端為他增加一個空單元,用來保存查找的關鍵字。這樣可以確保靜態查找表中有一個與查找關鍵字相同的數據,就可以不再需要使用“j < source.length”進行判斷了。針對如何判斷查找失敗,可以定義一個標記:flag。flag值不改變則代表查找失敗。
針對的線性表中的元素不允許存在元素相同的情況,看代碼。
public class SequentialSearch { /*** 順序查找基礎算法 */ public void basicSeqSearcher(int [] source , int key) { int j; for(j = 0 ; j< source.length && source[j] != key; j++)//循環查找關鍵字 ; if(j < source.length) //查找成功 { System.out.print("該元素為:" + source[j] + "; 所在位置:" + (j+1)); } else //查找失敗 System.out.print("查找失敗。不包含指定值:" + key); } /** * 順序查找改進算法 * @param source 數組列表 * @param key 查找的關鍵字 * @return */ public void sequentialSearcher(int [] source , int key) { int flag = 0;//設定一個標記,用于表示數組列表中是否包括要查找的關鍵字Key System.out.print("元數據:"); for(int i = 0 ; i < source.length ; i ++) { System.out.print(source[i]+","); } System.out.print("\n"); //數組替換 int [] newSource = new int[(source.length + 1)]; for(int a = 0 ; a < source.length ; a ++) { newSource[a] = source[a]; } newSource[source.length] = key; int j; for(j = 0 ; j < newSource.length ; j ++) { if(newSource[j] == key) { if(j != source.length)//因為數組最后一個元素是開始故意插入的,與Key相等,所以這里不輸出 { flag = 1;//如果包含key則flag標記為1 System.out.println("該元素為:" + newSource[j] + "; 所在位置:" + (j+1)); } } } if(flag == 0) System.out.println("查找失敗。不包含指定值:" + key); } public static void main(String[] args) { int [] s = {69,65,90,3,27,6,4,4,92,6,28,88,66,6,55,54}; int key = 6; SequentialSearch ss = new SequentialSearch(); ss.sequentialSearcher(s, key); System.out.println("基礎算法查找:"); ss.basicSeqSearcher(s, key); }
}</pre>輸出如下:
情況1,查找成功
情況2,查找失敗
</span>
本文由用戶 Yangcl 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!