java之陣列的索引,排序以及二維陣列
陣列的索引
1,通過索引查詢陣列的元素
即通過元素的下標來查詢該元素
int[] array = new int[] {1,2,3,4,5};
int num = array[2];
System.out.println(num);
輸出為:3.
要注意的是,陣列中元素的下標是從0開始計數的
2.通過元素查詢索引,即查詢元素在陣列中的下標
int num = 5;//查詢該元素在陣列中的位置
int index = -1;//定義一個變數用來記錄元素的下標
int[] array = new int[] {1,2,3,4,5,6};
for (int i = 0; i < array.length; i++)
{
if (array[i]==num)
{
index = i;//當陣列中的元素與要查詢的元素的值一樣時,則查到了
break;//跳出迴圈
}
}
System.out.println("在陣列中的位置為"+index);//如果輸出為-1,則說明該元素不在陣列中
輸出為
在陣列中的位置為4
陣列元素的反轉:即陣列中的元素對稱交換位置
例:封裝一個函式,用來對陣列反轉
public static int[] change(int[]array)
{
int num = array.length/2; //確定要交換的次數,即迴圈的次數
for (int i = 0; i < num; i++)
{
int temp = array[i]; //需要定義一個變數作為中間值
array[i] = array[array.length-1-i];
array[array.length-1-i] = temp;
}
return array;
}
再寫一個函式,有來交換兩個數的值
public static void changeNumber(int a,int b)
{
int temp = a;
a = b ;
b = temp;
}
public static void main(String[] args) {
int a = 10;
int b = 100;
changeNumber(10, 100);
System.out.println("a的值為"+a +",b的值為"+b);
}
則輸出結果是a = 10,b =100,
那麼為什麼兩個數的值並沒有交換,而陣列中的元素卻交換了?
因為,所有的函式都是存在於棧記憶體中的,而陣列是存在堆記憶體中,在陣列的元素交換中,陣列傳入函式中的是,陣列的地址,函式內部是通過地址找到堆記憶體中的陣列,並對陣列進行操作的,
但是僅僅是交換兩個數的值時,兩個數值都是存在於main函式中,也是存在棧記憶體中,傳入changNumber函式的倆值其實就是倆常數,並未將main函式中的a,b傳進去.
⚠️棧記憶體的特點是當函式執行完畢時,系統會立即釋放記憶體,但是堆記憶體中的垃圾回收機制(GC)有滯後性.
陣列的排序
陣列的排序的方法有很多:氣泡排序,選擇排序,插入排序等.另外系統中也給我提供了排序的方法
1.系統提供的排序方法
int[]array = new int[] {2,3,8,1,5,6};
Arrays.sort(array);
System.out.println(Arrays.toString(array));
輸出為:[1, 2, 3, 5, 6, 8]
可以看出系統提供的是升序排列的方法
2.氣泡排序
氣泡排序的流程是:比較相鄰倆元素的大小,然後根據需要交換位置
int[]array = new int[] {2,3,8,1,5,6};
//氣泡排序的外層控制的是需要確定元素的次數
for (int i = 0; i < array.length-1; i++) {
//內層迴圈控制的是每個數需要比較的次數,-i是因為有i個元素已經確定了位置,不需要比較了
for (int j = 0; j < array.length-1-i; j++)
{
if (array[j]>array[j+1])
{
int temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
}
}
System.out.println(Arrays.toString(array));
輸出結果為:
[1, 2, 3, 5, 6, 8]
3.選擇排序
選擇排序的原理:選擇一個數和陣列中的其它數都進行一次比較,然後根據大小進行交換位置,一般第一個數會選擇下標為0的數
for (int i = 0; i < array.length-1; i++)
{
//i+1是因為每次重新開始迴圈就說明確定了一個值,則比較的次數就少1
for (int j = i+1; j < array.length; j++)
{
if (array[i]>array[j])
{
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
}
System.out.println(Arrays.toString(array));
輸出結果為
[1, 2, 3, 5, 6, 8]
折半查詢
折半查詢的前提是陣列要是一個有序的陣列
折半查詢的原理是先把要查詢的值和陣列的中間值進行比較,如果小於中間值,則再和左半邊陣列的中間值進行比較,一直到找出值為止,或者倒最後也沒有找到(也可以理解為最小下標和最大下標的移動)
例:求出15在下列陣列中的位置
int[] array = new int[] {3,6,8,11,13,19,25};
int num = 15;
int min = 0;
int max = array.length - 1;
int mid = (min + max)/2;
while (array[mid]==num)
{
if (array[mid]>num)
{
max = mid-1;
}else if (array[mid]<num)
{
min = mid +1;
}
mid = (min + max)/2;
if (min>max)
{
mid = -1;
}
}
System.out.println("該元素在陣列中的位置為:"+mid);
輸出結果是:該元素在陣列中的位置為:-1,則說明15不在陣列中.
二維陣列
二維陣列的定義:將一組資料型別相同的一維陣列放在一起,二維陣列也是一個容器
宣告二維陣列的方法:
int[][] arr = new int[5][6];//二維陣列中有5個一維陣列,每個一維陣列中又裝了6個元素,切元素都是int型別的
二維陣列的宣告只需要把二維陣列的長度宣告瞭即可,也可以不宣告一維陣列的長度
int[][] arr = new int[5][];
//直接在後面寫出陣列中的元素也是可以的
int[][] arr = new int[][] {
{1,2,5,4,9},
{6,7,3,6,8},
{2,4,1,5,3}
};
二維陣列的遍歷
即:將陣列中的元素全部訪問一遍
int[][] arr = new int[][] {
{1,2,5,4,9},
{6,7,3,6,8},
{2,4,1,5,3}
};
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) //將二維陣列中的一維陣列全部遍歷一遍
{
if (i==arr.length-1 &&j == arr[arr.length-1].length-1)
{
System.out.println(arr[i][j]);
}
else
{
System.out.print(arr[i][j]+",");
}
}
}
輸出結果為
1,2,5,4,9,6,7,3,6,8,2,4,1,5,3
相關文章
- 二維陣列排序陣列排序
- php 二維陣列排序PHP陣列排序
- 二維陣列行排序陣列排序
- JavaSE 陣列:一維陣列&二維陣列Java陣列
- Java二維陣列Java陣列
- ***PHP陣列排序+php二維陣列排序方法(PHP比較器)PHP陣列排序
- C++動態建立二維陣列,二維陣列指標,以及動態二維陣列函式傳遞C++陣列指標函式
- js 一維陣列轉二維陣列JS陣列
- js 二維陣列轉一維陣列JS陣列
- PHP二維陣列轉一維陣列PHP陣列
- Java陣列宣告建立和使用以及多維陣列、Arrays類、稀疏陣列Java陣列
- 多維陣列排序陣列排序
- 二維陣列按照其內層陣列的某個鍵值排序陣列排序
- Java 二維陣列轉一維Java陣列
- 二維陣列陣列
- 陣列二:使用陣列可變函式為陣列排序陣列函式排序
- JAVA基礎--二維陣列Java陣列
- PHP中二維陣列與多維陣列PHP陣列
- JavaScript --二維陣列查詢一維陣列JavaScript陣列
- Oracle使用由字串索引的二維陣列Oracle字串索引陣列
- Java 學習筆記 二維陣列和物件陣列Java筆記陣列物件
- C/C++ 二維陣列的理解(多維陣列)C++陣列
- 指標陣列和陣列指標與二維陣列指標陣列
- PHP 多維陣列排序PHP陣列排序
- 二維陣列和稀疏陣列互轉陣列
- JavaScript二維陣列轉換成一維陣列JavaScript陣列
- vector 二維陣列陣列
- JavaScript二維陣列JavaScript陣列
- JavaScript 二維陣列JavaScript陣列
- 求二維陣列中最大子陣列的和陣列
- 二維陣列排序函式array_multisort()陣列排序函式
- Java實現普通二維陣列和稀疏陣列的相互轉換Java陣列
- 資料結構之陣列和矩陣--矩陣&不規則二維陣列資料結構陣列矩陣
- Java(二)陣列Java陣列
- 二位陣列排序陣列排序
- Rust與Java程式碼比較:將二維陣列轉為三維陣列RustJava陣列
- PHP一維陣列轉二維陣列正規表示式PHP陣列
- 二維陣列根據鍵的值進行排序陣列排序