順序查找改進算法

Yangcl 11年前發布 | 4K 次閱讀 Runtastic

   

    順序查找,最簡單的一種查找方法。其基本思想是:從線性表的一端開始,依次將每個記錄的關鍵字與給定值進行比較。若某個記錄的給定值等于給定值,則表示查找成功并返回記錄序號;若將線性表中的記錄查找完仍然沒有找到關鍵字,則表示查找失敗,返回一失敗值。</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 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!