1樓:佛系執著
折半查詢法是效率較高的一種查詢方法。
基本思想是:設查詢資料的範圍下限為l=0,上限為h=4,求中點m=(l+h)/2,用x與中點元素am比較,若x等於am,即找到,停止查詢;
否則,若x大於am,替換下限l=m+1,到下半段繼續查詢;若x小於am,換上限h=m-1,到上半段繼續查詢;
如此重複前面的過程直到找到或者l>h為止。如果l>h,說明沒有此數,列印找不到資訊,程式結束。
步驟:1、首先確定整個查詢區間的中間位置 mid=( left + right) /2 。
2、用待查關鍵字值與中間位置的關鍵字值進行比較;若相等,則查詢成功,若大於,則在後(右)半個區域繼續進行折半查詢,若小於,則在前(左)半個區域繼續進行折半查詢。
3、對確定的縮小區域再按折半公式,重複上述步驟。最後得到結果:要麼查詢成功,要麼查詢失敗。折半查詢的儲存結構採用一維陣列存放。
擴充套件資料
折半查詢法的優點:比較次數少,查詢速度快,平均效能好;
缺點:是要求待查表為有序表,且插入刪除困難。
因此,折半查詢方法適用於不經常變動而查詢頻繁的有序列表。
2樓:匿名使用者
二分法查詢演算法又叫折半查詢。其思想是將已排好序的數列依次存入陣列,設查詢數值為x,用指標bot指向數列最左端位置(最小值),指標top指向數列最右端位置(最大值),取bot和top的中間值mid指向數列中間。
具體步驟解釋如下:當top>bot時,比較查詢x與a[mid],有3種可能。
若x = a[mid],則表示找到,退出比較查詢。
若x < a[mid],則選擇前半段繼續比較查詢,bot不變,top變成mid-1。
若x > a[mid],則選擇後半段繼續比較查詢,bot變成mid+1,top不變
結束過程有兩種:一種是找到了x = a[mid];另一種是沒找到,即top < bot。
二分查詢也稱折半查詢(binary search),它是一種效率較高的查詢方法。但是,折半查詢要求線性表必須採用順序儲存結構,而且表中元素按關鍵字有序排列。
3樓:清和神子
演算法思想:
折半查詢(binary search)的查詢過程是:先確定等查記錄所在範圍(區間),然後逐步縮小範圍直到找到或找不到該記錄為止。
步驟如下:
比較x和a的中間元素a[mid],
若x=a[mid],則x在l中的位置就是mid;
如果x如果x>a[mid],則x在a[mid]的後面。
無論在哪部分查詢x,其方法都和在a中查詢x一樣,只不過是查詢的規模縮小了。這就說明此問題滿足分治法的第二個和第三個適用條件。
二分查詢也稱折半查詢(binary search),它是一種效率較高的查詢方法。但是,折半查詢要求線性表必須採用順序儲存結構,而且表中元素按關鍵字有序排列。
首先,假設表中元素是按升序排列,將表中間位置記錄的關鍵字與查詢關鍵字比較,如果兩者相等,則查詢成功;否則利用中間位置記錄將表分成前、後兩個子表,如果中間位置記錄的關鍵字大於查詢關鍵字,則進一步查詢前一子表,否則進一步查詢後一子表。重複以上過程,直到找到滿足條件的記錄,使查詢成功,或直到子表不存在為止,此時查詢不成功。
4樓:匿名使用者
#includeusing namespace std;#define n 10 int half(int s,int a,int b,int key) } int main()
答案補充
在對數列查詢之前,可能已經知道了數列的許多相關資訊。比如說,知道了有序數列的大體分佈等。如果知道了有序數列中每相鄰兩個元素之差的最大值的一個上界,這時可以在每次迴圈做折半之前先進行一次篩選工作,把儘可能多的不必要的元素過濾掉,這樣可以極大地提高查詢速度。
其最壞情況下查詢一個元素的最大比較次數將介於1和[ log2 n ] + 1 ( n為元素的個數)之間。另外,在實際的很多應用中可通過在建立有序數列的過程中同時得到m。比如說在建立陣列的過程中可根據插入新元素的情況不斷地更新m,從而在每次查詢的過程中極大地提高效率
5樓:這名字夠隨便
你對對半查詢理解錯了,你的min,max應該是下標而不是值
原理:類似於二分法解方程,二分查詢首先比對序列中間的數是否是要找的數,如果不是,由於是有序數列,則看其在左側區間還是右側區間,捨棄不在的那一半區間,然後在剩餘的區間重複剛才的辦法,直到找到該數,由於每次捨棄一半的資料量,所以查詢效率較高。
描述:設三個變數 left,right,middle分別為序列的兩側下標和中間下標,當判斷出不在左側區間,則 left=middle+1 ,從而利用右側一半構造出一個新區間,否則 right=middle-1,利用左邊一側構造新區間,然後重複剛才過程,如此下去,要麼找到資料,要麼left>right,此時也應該停止查詢,說明序列中沒有該數。
6樓:匿名使用者
折半查詢的基本思想是:對於有序表,查詢時先取表中間位置的記錄關鍵字和所給關鍵字進行比較,若相等,則查詢成功;如果給定值比該記錄關鍵字大,則在後半部分繼續進行折半查詢;否則在前半部分進行折半查詢,直到查詢範圍為空而查不到為止。
折半查詢的過程實際上死先確定待查詢元素所在的區域,然後逐步縮小區域,直到查詢成功或失敗為止。
演算法中需要用到三個變數,low表示區域下界,high表示上界,中間位置mid=(low+high)/2
演算法:#define maxlen n
......
......
int binsearch(datatype a,int k)
return -1; //查詢失敗,返回-1
}這只是演算法,運用要靠你自己!
c++折半查詢法
7樓:匿名使用者
首先,應當宣告兩個變數來記錄這般查詢空間的範圍,這裡我們定義begin和end;其次判斷語句if(x=a[i])中x=a[i]是賦值語句,"=="是判斷相等運算子,應該為if(x == a[i]);最後,主函式為int型,應最後返回0表示執行成功,即在程式結尾家return 0;
以下是我在你**基礎上略加修改,已通過執行併成功。
#include
int main()
else
if (x>a[i])
end = i - 1;
else
begin = i + 1;
}return 0;}
8樓:匿名使用者
你對對半查詢理解錯了,你的min,max應該是下標而不是值原理:類似於二分法解方程,二分查詢首先比對序列中間的數是否是要找的數,如果不是,由於是有序數列,則看其在左側區間還是右側區間,捨棄不在的那一半區間,然後在剩餘的區間重複剛才的辦法,直到找到該數,由於每次捨棄一半的資料量,所以查詢效率較高。
描述:設三個變數 left,right,middle分別為序列的兩側下標和中間下標,當判斷出不在左側區間,則 left=middle+1 ,從而利用右側一半構造出一個新區間,否則 right=middle-1,利用左邊一側構造新區間,然後重複剛才過程,如此下去,要麼找到資料,要麼left>right,此時也應該停止查詢,說明序列中沒有該數。
const int n=10;
int left,right,middle,x;
int a[n]=;
cout << "輸入個要查詢的數: ";
cin>>x;
for (left=0,right=n-1;left<=right;)
{middle=(left+right)/2;
if (x==a[middle])
break;
else if (x
9樓:風若遠去何人留
折半查詢法是演算法一種,可以被任何計算機語言使用。用c語言自然也可以實現。
1、定義:
在電腦科學中,折半搜尋(英語:half-interval search),也稱二分搜尋(英語:binary search)、對數搜尋(英語:
logarithmic search),是一種在有序陣列中查詢某一特定元素的搜尋演算法。
搜尋過程從陣列的中間元素開始,如果中間元素正好是要查詢的元素,則搜尋過程結束;如果某一特定元素大於或者小於中間元素,則在陣列大於或小於中間元素的那一半中查詢,而且跟開始一樣從中間元素開始比較。如果在某一步驟陣列為空,則代表找不到。這種搜尋演算法每一次比較都使搜尋範圍縮小一半。
2、查詢規則:
折半查詢法是效率較高的一種查詢方法。假設有已經按照從小到大的順序排列好的五個整數a0~a4,要查詢的數是x,其基本思想是: 設查詢資料的範圍下限為l=0,上限為h=4,求中點m=(l+h)/2,用x與中點元素am比較,若x等於am,即找到,停止查詢;否則,若x大於am,替換下限l=m+1,到下半段繼續查詢;若x小於am,換上限h=m-1,到上半段繼續查詢;如此重複前面的過程直到找到或者l>h為止。
如果l>h,說明沒有此數,列印找不到資訊,程式結束。
int bin_search(int a,int n,int key)
}return -1;//未找到,返回-1.}
10樓:億戀
第一個錯誤if語句巢狀不正確 如果a[i]<=b時函式直接運算x=x+1那條語句 應改為
if(a[i]==b)
else if(a[i]>b) m=i;
else n=i;不過這樣改了還不正確 那是因為for語句有問題 如果b=1 你的程式結果是木有 這顯然錯了 應改為標準答案那樣
11樓:水天之山
else只執行其下的一條語句,你程式中第一次就break跳出了,可定錯了。
改為:else
12樓:伊·梵
if (x=a[i]) /* 應該是x==a[i]吧 */用遞迴實現,程式會很好理解
int f(int a,int x, int start,int end)
修改如下:
#include
void main()
else if (x>a[i]) end = i-1;
else start=i+1; } }
13樓:
#include
#include
int cmp(const void * a,const void * b)
void main()
else if (x>a[i])
start = i+1;
else
end=i-1; } }
jit的基本思想 目標體系 基本手段
一 jit生產方式的基本思想是 只在需要的時候,按需要的量,生產所需的產品 也就是追求一種無庫存,或庫存達到最小的生產系統。jit的基本思想是生產的計劃和控制及庫存的管理。二 目標體系是廢品量最低 零廢品 jit要求消除各種引起不合理的原因,在加工過程中每一工序都要求達到最好水平。庫存量最低 零庫存...
尼采基本思想的解釋是什麼
尼采的思想反映了當時正在形成的壟斷資產階級的要求和願望。他譴責自由資回產階級,稱他們為 答因循守舊 苟且偷生的庸人,認為必須否定受理性主義 教以及人道主義的影響而日趨沒落的西方文明,提倡主觀戰鬥精神和對生活的肯定態度,強調進化即是權力意志實現其自身的過程,人生的目的就在於發揮權力,擴張自我。鼓吹超人...
向量控制的基本思想是什麼
在變頻器調速技術成熟之前,直流電動機的調速特性被公認為是最好的,如圖2 7 所示。究其原因,直流電動機優異的調速效能是具備瞭如下三個條件 1.磁極固定在定子機座上,在空間能產生一個穩定直流磁場。2.電樞繞組是固定在轉子鐵心槽裡,在空間能產生一個穩定的電樞磁勢,並且電樞磁勢總是能保持與磁場相垂直,產生...