1.問題
寫出兩種檢索演算法:在乙個排好序的陣列t[1…n]中查詢x,如果x在t中,輸出x在t的下標j;如果x不在t中,輸出j=0.
2.解析
在單調陣列中找乙個數我們第乙個會想到的就是順序查詢,這是最簡單最暴力的查詢方法,就是從頭到尾,乙個乙個的檢索;
第二種是比較常見用的也比較廣的——二分查詢。二分二分,故名思意,就是將乙個單調陣列從中間分成兩個單調陣列,通過比較中間值mid,來判斷要找的資料在左邊還是右邊的陣列中,以此類推,直到找到所要找的數,或者是最後陣列不能再分(即只有乙個元素),查詢結束。
3.設計
偽**:for(i=0;ivalue)
r=mid-1;
else return mid;
}return 0;
因為減少了很多沒必要的查詢,所以複雜度也很低,為o(log n);
為什麼是o(log n)呢?你可以想你要找x次才能把n個數找完,那麼2^x=n,推過來就是x=log n。
4.**
順序查詢:
int
sequence_search
(int a,
int value,
int n)
二分查詢:
int
binary_search
(int a,
int value,
int n)
return0;
}
Oracle作業3 簡單查詢
一 建立學生表 create table students stu id number 10 constraints pk stus id primary key,stu name varchar2 20 not null stu scores number 3 二 插入資料 insert into...
作業 C 作業3
3 2 include using namespace std int main int year,month cout 請輸入年份和月份 cin year month if month 2 if year 4 0 year 100 0 year 400 0 cout 本月29天 int main ...
連線查詢 作業
1 顯示所有員工的姓名ename,部門號deptno和部門名稱dname。select emp2.empno emp2.empname,emp2.deptno,dept.dname from emp2 dept where emp2.deptno dept.deptno select e.empno...