【小白轉碼】04
阿新 • • 發佈:2022-03-23
一、陣列
1.陣列的概念
陣列(array),就是多個相同型別的資料按一定順序排列的集合,並使用一個名字命名,然後用編號區分這些資料。
特點:1.長度一旦確認就不可改變
2.可以使用基礎資料型別或者引用資料型別
2.宣告與初始化
2.1 宣告的兩種方法
//推薦
int[] a;
//不推薦
int a[];
2.2初始化
2.2.1 靜態初始化
//情況一:先宣告再初始化
int[] a;
a = new int[]{1,2,3};
//情況二:宣告加初始化
int[] a = new int[]{1,2,3};
//簡化
int[] a = {1,2,3};
2.2.2 動態初始化
//情況一:先宣告再初始化
int a[];
a = new int[10];
//情況二:宣告加初始化
int[] a = new int[10];
2.3 索引的使用
①訪問指定元素
int[] a = new int[]{1,2,3};
//[0,2]
int b = a[2];//3
②指定位置賦值
int[] a = new int[3];
a[2] = 3;//3
2.4 陣列的遍歷
//利用for迴圈來處理
//length可以得出陣列的長度
for(int i = 0;i < a.length;i++){
System.out.println(a[i]);
}
3.演算法
3.1 查詢元素
3.1.1 順序查詢
int[] arr = {2, 3, 4, 5, 6};
int index = -1;//標記
int value = 1;//要查詢的值
for(int i = 0;i < arr.length;i++){
if(arr[i] == value){
index = i;
}
}
if(value == -1){
System.out.println("沒有");
}else {
System.out.println(index);
}
3.2 氣泡排序
原理:比較兩個相鄰的元素,將值大的元素交換至右端,最大值出現在最後位置。
//從小到大
//不斷比較將極值先放到最後邊
int[] arr = {2, 5, 3, 34, 4, 10, 6, 1, 46};
int min;
for (int i = 0; i < arr.length - 1; i++) {//比較的次數 有n個元素,需要比較n-1次
for(int j = 0;j < arr.length - i - 1;j++){//每比較一次就會把極值放到末尾,所以比較的元素數量每一次都會減少一個。
if(arr[j] > arr[j+1]){
min = arr[j+1];
arr[j+1] = arr[j];
arr[j] = min;
}
}
}
for (int a :arr) {
System.out.println(a);
}
3.3陣列對調
int[] ints = {1, 2, 3, 4, 5};
for (int i = 0; i < ints.length/2; i++) {
int a = ints[i];
ints[i] = ints[ints.length - 1 - i];
ints[ints.length - 1- i] = a;
}
for (int i = 0; i < ints.length; i++) {
System.out.println(ints[i]);
}
3.4簡單直接選擇排序
int[] arr = {1, 3, 654, 23, 31, 6, 7, 45, 13, 1};
for (int i = 0; i < arr.length - 1; i++) {
int mixIndex = i;
for (int j = i+1; j < arr.length; j++) {
if(arr[mixIndex] > arr[j]){
mixIndex = j;
}
}
if(mixIndex != i){
int temp = arr[mixIndex];
arr[mixIndex] = arr[i];
arr[i] = temp;
}
}
for (int i = 0; i <arr.length; i++) {
System.out.print(arr[i] + " ");
}
3.5 二分查詢
int[] arr = {1, 32, 5, 7, 1, 5, 543, 7, 314, 84, 54};
//前提是陣列有序
for (int i = 0; i < arr.length - 1; i++) {
for (int j = 0; j < arr.length - 1 - i; j++) {
if (arr[j] > arr[j+1]){
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
//需要查詢的元素
int num = 884;
int value = -1;
//標記符
int head = 0;
int end = arr.length - 1;
while (head <= end){
int mid = (head + end)/2;
if(arr[mid] > num){
end = mid - 1;
}
if(arr[mid] < num){
head = mid + 1;
}
if(arr[mid] == num){
value = mid;
break;
}
}
if(value != -1){
System.out.println("存在,位置在:" + value);
}else {
System.out.println("不存在");
}