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