1 最值:max、min
注意:
定义的max或min不能是0,因为数组中可能会有负数,应该定义为第一个元素arr[0]
int[] arr={-8,-4,0,8,5,2}; //最大值
int max=arr[0]; //不能是0
for (int i = 1; i < arr.length; i++) {
if (max<arr[i]){
max=arr[i];
}
}
System.out.println("最大值为"+max); //最小值
int min=arr[0]; //不能是0
for (int i = 1; i < arr.length; i++) {
if (min>arr[i]){
min=arr[i];
}
}
System.out.println("最小值为"+min);
2 找指定元素
Scanner sc=new Scanner(System.in);
System.out.print("请输入一个整数:");
int num=sc.nextInt();
int index=-1; //不能是0
for (int i = 0; i < arr.length; i++) {
if (num==arr[i]){
index=i;
}
}
System.out.print((index == -1) ?(num + "不存在"):(num + "存在,且下标为" + index));
3 冒泡排序:升序、降序
int[] arr={3,-5,0,9,7,-11};
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;
}
}
}
System.out.println(Arrays.toString(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;
}
}
}
4 函数升序、降序
//降序:升序后倒序
int[] arr={-2,-9,9,7,0,2,-18};
Arrays.sort(arr); //升序
int num=arr[0]; //倒序
for (int i = 1; i < arr.length; i++) {
if (num>arr[i]){
int temp=arr[i];
arr[i]=arr[i+1];
arr[i+1]=arr[i];
}
}
System.out.print(Arrays.toString(arr));
5 增删改查
5.1 增:必须是有序数组,插入后新数组长度=源数组长度+1
String[] names={"aa","bb","cc"};
System.out.println("修改前:"+ Arrays.toString(names));
Scanner sc=new Scanner(System.in);
System.out.print("请输入你要修改的元素:");
String update=sc.next();
//先查找是否存在,返回下标
int index=-1;
for (int i = 0; i < names.length; i++) {
if (update.equalsIgnoreCase(names[i])){ //存在
index=i;
break;
}
}
//根据下标进行更改
if (index!=-1){
System.out.print("请选择是否执行修改操作?(y/n)");
String flag=sc.next();
if (flag.equalsIgnoreCase("y")){
//执行修改操作
System.out.print("请输入修改后的内容:");
String updateAfter=sc.next();
names[index]=updateAfter;
System.out.print("修改后的数组为:"+Arrays.toString(names));
}else{
System.out.print("修改操作已撤销!");
}
}else {
System.out.print("需要修改的元素不存在"); }
sc.close();
5.2 删:被删除的元素一定要存在,删除后新数组长度=源数组长度-1
String[] names={"aa","cc","dd","bb","ff"};
System.out.println("删除前的数组是:"+ Arrays.toString(names)); //输入要删除的元素
Scanner sc=new Scanner(System.in);
System.out.print("请输入要删除的元素:");
String del= sc.next(); //要删除的元素是否存在,先假设不存在,存在返回元素下标
int index=-1;
for (int i = 0; i < names.length; i++) {
if (del.equalsIgnoreCase(names[i])){
index=i; break;
}
}
if (index!=-1){
System.out.print("是否删除?(y/n)");
String flag=sc.next();
if(flag.equalsIgnoreCase("n")){
System.out.println("撤销删除操作");
}else {
//创建删除后的新数组
String[] newNames=new String[names.length-1];
for (int i = 0; i < newNames.length; i++) {
if (i<index){
//要删除元素之前的元素正常赋值
newNames[i]=names[i];
}else {
//要删除元素的元素不赋值
newNames[i]=names[i+1];
}
}
System.out.print("删除后的数组是:"+Arrays.toString(newNames));
}
}else{
System.out.print("要删除的元素不存在");
}
sc.close();
5.3 改:要修改的元素必须存在
//插入元素
int[] arr={3,-5,0,9,7,-11};
System.out.println("插入前的数组为:"+ Arrays.toString(arr)); //排序
Arrays.sort(arr);
Scanner sc=new Scanner(System.in);
System.out.print("请输入要插入的元素:");
int num=sc.nextInt();
int index=0; //假设要插入的位置是0
for (int i = 0; i < num; i++) {
//判断第一次比插入元素大的元素
if (num<arr[i]){
index=i; break;
}else{
//插入的元素比数组里的元素都大
index=arr.length;
}
}
int[] newArr=new int[arr.length+1]; //创建新数组,长度为源数组长度+1
//遍历新数组,将源数据和插入的元素复制到新数组中
for (int i = 0; i < newArr.length; i++) {
if (i==index){
newArr[i]=num;
}else if(i<index){
newArr[i]=arr[i];
}else{
newArr[i]=arr[i-1];
}
}
System.out.print("插入后的数组为:"+Arrays.toString(newArr));
5.4 折半查找 (二分法查找):必须是对有序数据进行折半
原理 : 对指定的数组 重复多次进行折半 ,用指定位置上的数据与折点位置上的数据进行比较
//1.折半查找,先升序
Arrays.sort(arr);
//2.输入要查找的数字
Scanner sc=new Scanner(System.in);
System.out.print("请输入要查找的数字:");
int num=sc.nextInt();
int index=-1;//假设不存在,下标为-1
int begin=0; int end=arr.length-1;//最大下标
//重复多次对数组进行折半查找,不知循环次数用while
while (begin<=end){
int middle=(begin+end)/2;
//折点位置
//输入的数与折点位置上的数
if (num==arr[middle]){
//将折点的位置赋值给index index=middle;
break;//已经找到
}else if (num>arr[middle]){
//输入数比折点大,在右侧,更改开始位置
begin=middle+1;
}else{
//输入数比折点小,在左侧,更改结尾位置
end=middle-1;
}
}
System.out.print((index==-1)?"元素不存在":"元素存在");
sc.close();