面试中常见的数组的操作:遍历,最值,反转,冒泡排序,二分查找(附代码)

数组:存储同一种数据类型的多个元素的容器;数组中的索引从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
}


二分查找原理图:



  








猜你喜欢

转载自blog.csdn.net/q18810146167/article/details/53730406