1樓:匿名使用者
二分該數的位置
輸入數設為x,陣列設為a,陣列長度為n
若我們取a[mid]與x比較
由於a是升序的,a[mid]前面的數都比a[mid]小,所以若x>a[mid] 則x>a[mid]前面的所有數,我們想要的答案就在區間[mid+1, n]。
反之答案與[1,mid-1]之間,若a[mid]=x,就退出演算法(找到答案),若a[mid]x,則x相鄰角標也已找到,就為mid與mid+1.
分析這個演算法的時間複雜度,
判斷答案在不在[l,r]中,取mid=(l+r)/2.這樣花o(1)判斷後即可鎖定答案在[l,mid-1]還是在[mid+1,r]
這樣設規模為n的問題時間耗費為t(n)
則由演算法過程可知:t(n)=o(1)+t(n/2) , t(1)=o(0)
n=2時,t(2)=o(1)+o(0)=o(1)
n=4時,t(4)=o(1)+o(1)=o(2)
n=8時,t(8)=o(1)+o(2)=o(3)
可發現0=log2(1),
1=log2(2),
2=log2(4),
3=log2(8).
用數學歸納法(詳見《資料結構與演算法初步》中「分治演算法的時間複雜度計算」)即可證明該演算法時間複雜度為o(log2(n)).
順便給份**(c++):
#include
int main(),n=6,x=1,ans,ret;//位置0按中國習慣不放數。
int l=1,r=6,mid;//搜尋區間[1,6]
while(l<=r)
if(a[mid]x)
if(a[mid]
#include
using namespace std;
int main(),n=6,x=567,ans,ret;//位置0按中國習慣不放數。
ans=lower_bound(a+1,a+7,x)-a;
if(a[ans]==x) printf("%d",ans);
else printf("%d %d",ans-1,ans);
}lower_bound返回(升序)陣列中第一個大於等於x的數的指標
2樓:學委林志誠
最簡單的做法就是將輸入值與陣列中的元素依次對比。
確定陣列中是否包含n個陣列的演算法問題,怎麼解決
3樓:司馬刀劍
對陣列進行排序,然後將相鄰的如果相等的去掉就可以了int m=0;
for(i=1;i m++; 排序可以呼叫庫函式 c++ sort(a,a+n); c qsort 關於j**a的陣列運算 4樓:匿名使用者 你主要是沒有弄明白陣列的開始是從0開始的,0標是陣列的第1個元素。搞清楚這個,其它就不是事兒. 5樓:飯依然特喜 a[2]= a[2][1]=34 下標很明確啊,直接取值就行了 c++陣列的問題 求一演算法 6樓: #include using namespace std; int main() ;for (int i = 0 ; i != sizeof(a)/sizeof(int)/2 ; ++i) for (int i = 0 ; i != 10 ; ++i)}標準庫有swap函式,可調換兩個變數的值,也可以自己寫一個類似的函式。有疑問可追問。 7樓: 6個元素的陣列a怎麼能放下10個數? 8樓:連理懿 前面五個和後面五個對應交換位置就行了 9樓:清賞無涯 最簡單的方法:再定義一個陣列,將原陣列從最後一個元素開始向前賦給新建的陣列,最後再將這個賦好值的陣列,賦給原陣列,用兩個for迴圈就搞定了 麻煩一點的話,就使用臨時變數賦值的方法,將首尾交換,可以採用指標,兩個指標,一個指尾,一個指頭,交換之後,指標的位置加一,減一。都很容易 void reverse(int a,int n)} 10樓:匿名使用者 int i = 0; int j = 5; while(i < j) 也可以用stack但那樣還需要額外空間 在scanf d n 後面加個getchar 把回車輸入的一個多餘字元給讀走,否則這個多餘字元會被gets讀到的。回車實際上輸入了兩個字元,一個用來告訴scanf停止輸入,一個是多餘字元,留在了輸入緩衝區內。因為for迴圈讀取字串時,將城市個數的回車換行當做一個string讀取了,所以少讀了一個 如... float a 5 是定義了一個指向陣列的指標,如果要把它當成二維陣列的話,相當於列數為5,行數可以動態分配。如 float a 5 int n 2 定義行數為2 a new float n 5 int sum 0 for int i 0 i 對於你定義的這個陣列,它表示有5個float 型別的指標... 第二個結果還可以理解,就是在vc下面後 是後到最後的,就是在一個表示式中要所有的計算全部結束之後,所以在那個表示式中,a的值都是10,到分號結束時a 的值才 了三次,變成了13,就出現了那樣的結果。在看第一個。任何一個表示式都回產生一個臨時值 這個可以自己查書找到,而且比較重要 雙目運算子需要兩個數...關於字元陣列輸出問題
C語言中關於二維陣列的問題,c語言關於定義二維陣列的問題
關於兩個輸出結果不同的問題,java 為什麼下列兩個輸出結果不同