面試中常見的陣列的操作:遍歷,最值,反轉,氣泡排序,二分查詢(附程式碼)
陣列:儲存同一種資料型別的多個元素的容器;陣列中的索引從0開始,最大編號是陣列的長度-1(減1);
下面給大家列出陣列常見的幾種操作:
A 遍歷
/**
* 遍歷
*/
public static void printArray(int[] arr){
System.out.print("[");
for (int i = 0; i < arr.length; i++) {
if (i==arr.length-1) {
System.out.print(arr[i]+"]");
}else{
System.out.print(arr[i]+",");
}
}
System.out.println();
}
B 獲取最值
/**
* 獲取最值
*/
private static int getMax(int[] arr){
int max = arr[0];//假設最大值為第一個元素
for (int i = 0; i < arr.length; i++) {
if (arr[i]>max) {
max=arr[i];
}
}
return max;
}
C 陣列反轉
/**
* 氣泡排序
*/
private static int[] boolSort(int [] arr){
printArray(arr);//方法執行前,檢視一下傳入的陣列
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;
}
}
}
printArray(arr);//方法執行完成後,重新看下陣列
return arr;
}
執行結果:
[1,2,5,8]
[8,5,2,1]
接下來是面試命中率比較高的了哦
D 氣泡排序
先解釋一下這個需求:需求:陣列元素:{24, 69, 80, 57, 13} 請對陣列元素進行排序。 (升序,從小到大)
相鄰元素兩兩比較,大的往後放,第一次完畢,最大值出現在了最大索引處;
/**
* 氣泡排序
*/
private static int[] boolSort(int [] arr){
printArray(arr);//方法執行前,檢視一下傳入的陣列
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;
}
}
}
printArray(arr);//方法執行完成後,重新看下陣列
return arr;
}
E:二分查詢
/**
* 二分查詢
*/
public static int binarySearch(int[] arr , int value){
int minIndex = 0 ;
int maxIndex = arr.length - 1 ;
while(minIndex <= maxIndex){
int midIndex = (minIndex + maxIndex) >>> 1 ;
if(arr[midIndex] == value){
System.out.println(midIndex);
return midIndex ;
}else if(arr[midIndex] > value){
maxIndex = midIndex - 1 ;//最大索引往前走
}else if(arr[midIndex] < value){
minIndex = midIndex + 1 ;//最小索引往後走
}
}
return -1 ;//最後實在找不到了返回-1
}
二分查詢原理圖: