關於陣列演算法的問題,關於java的陣列運算

2022-12-07 11:56:15 字數 2266 閱讀 2080

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讀取了,所以少讀了一個 如...

C語言中關於二維陣列的問題,c語言關於定義二維陣列的問題

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 型別的指標...

關於兩個輸出結果不同的問題,java 為什麼下列兩個輸出結果不同

第二個結果還可以理解,就是在vc下面後 是後到最後的,就是在一個表示式中要所有的計算全部結束之後,所以在那個表示式中,a的值都是10,到分號結束時a 的值才 了三次,變成了13,就出現了那樣的結果。在看第一個。任何一個表示式都回產生一個臨時值 這個可以自己查書找到,而且比較重要 雙目運算子需要兩個數...