简单了解基本算法
数值操作
public class suanfa1 {
public static void main(String[] args) {
// 算法考察:求最大值最小值平均数总和
// [10,99]
// (int)(math.random()*(99-10+1)+10)
int[] arr = new int[10];
for(int i = 0;i<arr.length;i++){
arr[i]=(int)(Math.random()*(99-10+1)+10);
}
// 遍历数组
for(int i = 0;i<arr.length;i++){
System.out.print(arr[i]+" ");
}
System.out.println();
// 求最大值
int maxvalue = arr[0];//不写0是因为可能存在负数存在
for(int i = 1;i<arr.length;i++){
if(arr[i]>maxvalue){
maxvalue = arr[i];
}
}
System.out.println("最大值为:"+maxvalue);
// 求最小值
int minvalue = arr[0];//不写0是因为可能负数存在
for(int i = 1;i<arr.length;i++){
if(arr[i]<minvalue){
minvalue = arr[i];
}
}
System.out.println("最小值为:"+minvalue);
// 求总和
int sum = 0;
for(int i = 0;i<arr.length;i++){
sum+=arr[i];
}
System.out.println("总和为:"+sum);
// 求平均值
double ave = 0;
ave = sum/arr.length;
System.out.println("平均值为:"+ave);
}
}
数值的赋值
public class suanfa2 {
public static void main(String[] args) {
/*
修改arr2的值导致arr1的值发生改变
是因为将arr1的值赋给了arr2
而arr1中存放的是堆中的地址
相当于c语言中的指针
* */
// 建立arr1数组
int[] arr1,arr2 ;
arr1 = new int[]{2,3,5,7,11,13,17,19};
for(int i = 0;i<arr1.length;i++){
System.out.print(arr1[i]+"\t");
}
System.out.println();
// 给arr2数组赋值
// 不能称作数组的复制,相当于是一个快捷方式
arr2 = arr1;
// 修改arr2中的偶索引元素,使其等于索引值
for(int i=0;i<arr2.length;i=i+2){
arr2[i]=i;
}
for(int i = 0;i<arr1.length;i++){
System.out.print(arr1[i]+"\t");
}
}
}
数组的复制与反转、二分法查找、线性查找
public static void main(String[] args) {
/*
* 数组的复制
*数组的反转
* */
// 建立arr1/arr2数组
int[] arr1,arr2 ;
arr1 = new int[]{2,3,5,7,11,13,17,19};
for(int i = 0;i<arr1.length;i++){
System.out.print(arr1[i]+"\t");
}
System.out.println("----------");
// 将arr1中的值复制到arr2
arr2 = new int[arr1.length];
for(int i = 0;i<arr1.length;i++){
arr2[i]=arr1[i];
}
// 打印arr2
for(int i = 0;i<arr1.length;i++){
System.out.print(arr2[i]+"\t");
}
System.out.println("------");
// 数组的反转方法一
// for(int i =0;i<arr1.length;i++){
// for(int i =0;i<arr1.length/2;i++){
// int temp = arr1[i];
// arr1[i]=arr1[arr1.length-i-1];
// arr1[arr1.length-i-1]=temp;
// }
// 数组的反转方法二
for(int i = 0,j=arr1.length-1;i<j;i++,j--){
int temp = arr1[i];
arr1[i]=arr1[j];
arr1[j]=temp;
}
// 方法三是通过两个数组完成
// for(int i = arr2.length-1;i>=0;i--){
//
// arr1[arr2.length-i-1]=arr2[i];
// }
for(int i = 0;i<arr1.length;i++){
System.out.print(arr1[i]+"\t");
}
System.out.println("---------");
// 数组的查找
// 线性查找
boolean isFlag = true;
int dest = 7;
for(int i = 0;i<arr1.length;i++){
if(arr1[i]==dest){
System.out.println(i);
isFlag = false;
break;
}
}
if(isFlag){
System.out.println("不好意思没有找到");
}
// 二分法查找:(所查找的数组必须有序)
int dest1=5;
int head = 0;
int end = arr1.length-1;
boolean isFlag1=true;
while(head<=end){
int middle = (head+end)/2;
if(dest1==arr1[middle]){
System.out.println("找到了"+middle);
isFlag=false;
}else if(arr1[middle]>dest1){
end=middle-1;
}else{//rr2[middle]<dest1)
head=middle+1;
}
}
if(isFlag){
System.out.println("不好意思没有找到");
}
// 排序算法
}
}
数组的冒泡排序
public class bubble {
public static void main(String[] args) {
int[] arr = new int[]{12,2,3,56,45,23,67,42};
// 冒泡排序
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]+"\t");
}
// boolean equals(int[] a,int[] b);
}
}