1. 程式人生 > 其它 >【小白轉碼】04

【小白轉碼】04

第四章

一、陣列

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("不存在");
}