Java陣列中陣列的運用與陣列排序 折半查詢

2021-08-14 08:31:57 字數 4600 閱讀 7492

注: array.length 代表陣列長度 length代表的就是長度
1.通過角標 查詢對應的元素

例如:封裝乙個函式 傳入數字1 返回 一 數字2 返回二...

public

static

void

main(string args)

public

static

char

fun(int index) ;//定義乙個陣列

// 按角標返回對應的字元

return array[index - 1];

//由於 陣列的角標是從0開始的

如果不減1 那麼傳入乙個1 返回的可能就是二 了

}2.通過元素 查詢該元素在陣列中的位置(角標)

例如:封裝乙個函式 定義乙個陣列 陣列值

分別為 3,6,11,22

傳入11

查詢對應的位置

public

static

void

main(string args) ;//定義乙個陣列

int index = fun(22, array);//定義乙個變數 接收這個方法

system.out.println(index);//輸出角標為多少

}//為了讓方法的使用性更強,可以把陣列也當引數傳進來

public

static

intfun(int index, int array)

}return a;//返回乙個a

}

陣列元素的反轉 也就是 將陣列中的值 倒過來

例如:123

45 反轉成為 543

21如果要將陣列中的值倒過來 那麼就代表

第乙個值和最後乙個換

第二個值和倒數第二個換

第三個值和倒數第三個換

...也就是

array[0] 和 array[length - 1] 換

array[1] 和 array[length - 1 - 1] 換

array[2] 和 array[length - -1 - 2] 換

從這裡我們分析出:

array[i] 和 array[length - 1 - i]換

那麼換幾次呢?

例如 123

451 和 5 換

2 和 4 換

例如 123

4567

1 和 7 換

2 和 6 換

3 和 5 換

從而得出 需要交換 length / 2 整數次

那麼 如何交換

這時 我們可以利用中間值來交換

例如://交換兩個整數

int a = 5;

int b = 10;

int mid = 0;

mid = a;

a = b;

b = mid

來達到交換的目的

例如:反轉陣列 123

45public

static

void main(string args) ;//定義陣列

//這裡做的是乙個 位址 的傳遞

reverse(array);

//遍歷陣列的方法

system.out.println(arrays.tostring(array));//列印陣列的方法

}public

static

void reverse(int array1)

}那麼 可以用方法反轉陣列 可不可以用方法反轉整數呢?

例如:public

static

void main(string args)

public

static

void reversenum(int a, int b)

將這段**輸入並執行時 發現並不能反轉

因為陣列儲存的是乙個位址 main函式中定義的位址

而reverse(array)這一步代表

將main函式中陣列的位址 轉遞給 reverse 方法

所以 main函式 和reverse 可以呼叫相同位址的陣列

所以可以進行反轉

而reversenum這個方法中 並沒有什麼可以和main函式共同使用的

當 reversenum 這個方法呼叫完以後 就出棧了

然後再繼續進行main函式的呼叫

所以這兩個整數 並不能反轉

氣泡排序其實就是按照什麼思想去排序(例如:公升序或者降序)

核心排序思想: 相鄰兩個數 進行比較 交換位置

例如:乙個陣列中的元素為: 325

1 將這個陣列進行氣泡排序

因為是相鄰兩個數 進行比較 交換

也就是說

第一次 235

1 第乙個和第二個比較後 交換

第二次 235

1 第二個和第三個比較 這時第二個已經被交換 變成 3 而 3

< 5 所以不交換

第三次 231

5 第三個和第四個比較 這時已經確定了乙個最大值 而且放到了陣列的最後

但是這時陣列還沒有完成比較 交換 我們稱 上面的步驟為 第一趟

那麼 第二趟:

第一次 231

5 第乙個和第二個比較 2

< 3 所以不交換

第二次 213

5 第二個和第三個比較 3 > 1 所以交換

由於 5 已經確定為最大值 所以 第三個和第四個已經不用比較

這時也確定了倒數第二大的數放在倒數第二個位置

第三趟第一次 123

5 第乙個和第二個比較 2 > 1 所以交換

這時也確定了倒數第三大的數放在倒數第三個位置

例如:將陣列 354

7192

8 進行氣泡排序

public

static

void main(string args) ;

// 1.把雙層迴圈結構搭出來

// 注意 內迴圈 -1 防止陣列越界

// 外迴圈 - 1 代表比較陣列長度 - 1 趟 (5個數 比較4趟)

// 內迴圈 - i 相當於 每一趟 都少比一次

// 外迴圈 相當於 比較多少趟

// 內迴圈 相當於 一趟 比較多少次

for (int i = 0; i < array.length - 1; i++) }}

// 列印陣列的方法

system.out.println(arrays.tostring(array));

}

選擇排序核心思想:

選擇乙個數 依次和後面的數 比較 換位(一般選擇第乙個數)

例如:將陣列 351

4 進行選擇排序

第一趟第一次 351

4 第乙個和第二個比

第二次 153

4 第乙個和第三個比

第三次 153

4 第乙個和第四個比

確定了最小值在第一位

第二趟第一次 135

4 第二個和第三個比

第二次 135

4 第二個和第四個比

確定了第二小在第二位

第三趟 134

5 第三個和第四個比

確定第三小在第三位

public

static

void main(string args) ;//定義乙個陣列

int temp = 0;//定義乙個變數 用於 元素交換

for (int i = 0; i < array.length - 1; i++) }}

system.out.println(arrays.tostring(array));

}

折半查詢的前提是 :

在乙個有序的陣列中查詢 乙個數在陣列中的角標

注意: 要在有序的陣列中 查詢

例如:查詢 陣列元素為 356

9121822

3355 中22的角標

public

static

void main(string args) ;

// 把 要用到的變數 全部宣告一遍

// 宣告最大 最小 中間角標

int min = 0;//最小角標

int max = array.length - 1;//最大角標 由於角標從0開始 所以最大角標是長度 -1

int mid = (array.length - 1) / 2;

// 要查詢的值

int key = 22;

/** 迴圈查詢

* array[mid] != key

*/while (key != array[mid]) else

if (key < array[mid])

// 挪動完角標後 還要進行折半操作

mid = (min + max) / 2;

//當最大角標 小於 最小角標的時候 說明 陣列中 沒有這個數

if (max < min)

}system.out.println("這個數的角標是: " + mid );

}day.3

Java陣列與陣列的遍歷

1.陣列的定義 陣列相當於乙個容器,存放了一組相同型別的資料。2.陣列存放的規則 是以下標 角標 來存放的,並且下標從0開始。3.宣告規範 資料型別 陣列名 初值。兩種表達方式 int array new int 陣列的個數 int array new int 5 int array new int...

陣列的運用

int main printf p n a printf p n a 1 printf d n sizeof a a中a表示整型陣列的首元素位址,a表示首元素,整型陣列,乙個元素佔4個位元組。printf p n a printf p n a 1 printf d n sizeof a a表示整個陣...

陣列的運用

1.在js中陣列的定義方式有兩種 var a 1,2,3,4 var b new array 1,2,3,4 當兩個陣列中只有乙個值的時候是有區別的 var a 4 此陣列只有乙個元素,為 4 var b new arr 4 此陣列有4個元素 2.通過命令對陣列的長度進行修改 例如 var a 1,...