package cn.itcast.array;
public class OperatorArr {
public static void main(String[] args) {
int[] arr = {7,43,321,28,92,55,129,};
//查找数组中的最大数
int num = findMaxNumber(arr);
System.out.println(num);
//交换数组中的二个元素
listArr(arr);
exchange(arr, 2, 4);
listArr(arr);
//二分法查找
int[] arr2 = new int[]{1,4,5,7,14,23,31,45};
int no = binarySearch(arr2, 23);
System.out.println("查找结果为" + no);
//数组中的元素反向输出
System.out.println("数组中的元素反向输出结果对比");
listArr(arr);
reverse(arr);
listArr(arr);
}
/** A.查找数组中的最大者
思路:
1.定义一个变量max,用于记住最大数,最好令max为数组中的第一个数
2.遍历数组arr
3.让每个元素与max比较,如果比max大,则让max记住这个数
4.返回max
*/
public static int findMaxNumber(int[] arr) {
int max = arr[0];
for(int i=0; i<arr.length; i++){
if(arr[i]>max){
max = arr[i];
}
}
return max;
}
/**B.交换数组的中的二个元素
思路:
1.定义一个临时变量temp
2.将每一个值赋给第一个数pos1
3.将第二个数pos2赋给第一个数pos1
4.将temp的值给第二个pos2
*/
public static void exchange(int[] arr,int pos1,int pos2){
int temp = arr[pos1];
arr[pos1] = arr[pos2];
arr[pos2] = temp;
}
/**C.以逗号的形式分割数组显示输出
思路:
1.定义一个StringBuffer的容器
2.遍历数组,将数组中的每一个元素放入数组中
3.删除容器中的最后一个元素符。
*/
public static void listArr(int[] arr) {
StringBuffer sb = new StringBuffer();
for(int i=0; i<arr.length; i++){
sb.append(arr[i]+",");
}
sb.delete(sb.length()-1,sb.length());
System.out.println(sb);
}
/**D.二分法查找,查找指定元素所在位置
思路:
1.定义一个变量start=0指向数组的开始位置
2.定义一个变量end=arr.length-1指向数组的结束位置
3.定义一个变量mid,用于记住要比较的数
4.定义一个while循环,不停的找,结束条件end>=start
5.在循环中找到中间位置:mid=(start+end)/2
6.让要找的数和mid位置元素进行比较
如果大:start=mid+1
如果小:end = mid -1;
如果相等:return mid
7.如果循环中没有匹配的,则返回-1;
*/
public static int binarySearch(int[] arr,int num) {
int start = 0;
int end = arr.length-1;
int mid;
while(end>=start){
mid = (start+end)/2;
if(num>arr[mid])
start = mid+1;
else if(num<arr[mid])
end = mid-1;
else
return mid;
}
return -1;
}
/**E.将数组中的元素反向输出
思路:
1.定义一个变量start=0,记住数组的开始位置
2.定义一个变量end=arr.length-1记住数组的结束位置
3.定义一个while循环,让开始位置与结束位置交换,结束条件:end>start
4,每次循环后:start++,end--
*/
public static void reverse(int[] arr) {
int start = 0;
int end = arr.length - 1;
while(end>start){
exchange(arr, start, end);
start++;
end--;
}
}
}