java算法以及Arrays用法

41 篇文章 0 订阅

Java中的常用算法

一、冒泡排序

重点规律:冒泡排序的最外层的次数是arr.length-1

第二层的循环的次数是arr.length-1-i

package com.qu;
​
import java.util.Arrays;
​
public class D4 {
​
    public static void main(String[] args) {
        // 冒泡排序
        int[] arr = {1,2,33,11,222,754,998};
        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));
​
    }
​
}
​

二、选择排序

思路:先把第i个当成默认值,然后与后面的数进行比较(i+1)取最小值,判断第i个数不等于最小值就交换位置

...循环

package com.qu;
​
import java.util.Arrays;
import java.util.Iterator;
​
public class XuanZeSort {
​
    public static void main(String[] args) {
        // 选择排序 简单写法
        int[] arr = {222,322,11,2,3213,2222,5634,7,89,654};
//      for (int i = 0; i < arr.length-1; i++) {
//          for (int j = i+1; j < arr.length; j++) {
//              if (arr[i]>arr[j]) {
//                  int temp = arr[i];
//                  arr[i] = arr[j];
//                  arr[j] = temp;
//              }
//          }
//      }
//      System.out.println(Arrays.toString(arr));
        
//      选择排序2
        for (int i = 0; i < arr.length-1; i++) {
            int min = i; //这个地方是索引
            for (int j = i+1; j < arr.length; j++) {
                if (arr[min] > arr[j]) {
                    min = j;
                }
            }
            if (min != i) {
                int temp = arr[min];
                arr[min] = arr[i];
                arr[i] = temp;
            }
        }
        System.out.println(Arrays.toString(arr));
​
    }
​
}
​

三、插入排序

思路:第一次比较12个,第二次比较123个,第三次比较1234个...

package com.qu;
​
import java.util.Arrays;
​
public class ChaRuSort {
​
    public static void main(String[] args) {
        // 插入排序
        int[] arr = {1,23,22,11,2,6,84,99};
        
        //待插入的队列
        for (int i = 1; i < arr.length; i++) {
            int n = i; //插入的位置
            while(n>0 && arr[n]<arr[n-1]) {
                int temp = arr[n];
                arr[n] = arr[n-1];
                arr[n-1] = temp;
                n--;
            }
        }
        System.out.println(Arrays.toString(arr));
    }
​
}
​

四、二分查找法

必须是一个有序序列,要用while的死循环,因为不知道要查多少次,还有就是要记得break关闭

package com.qu;
​
import java.util.Scanner;
​
public class D3 {
​
    public static void main(String[] args) {
        // 二分查找法 必须是有序数组 不知道查多少次,用while的死循环
        int[] arr = {1,5,9,11,15,22,58,99,100};
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个你要查找的数:");
        int num = sc.nextInt();//拿一个容器去接这个数
        int start = 0;//定义初始值 是索引
        int end = arr.length-1;
        while(true) {
            int mid = (end+start)/2;
            if (arr[mid] == num) {
                System.out.println("猜对了,这个数的索引是"+mid);
                break;
            }else if (arr[mid] > num) { //猜的数小了
                end = mid-1;
            }else { //arr[mid] > num 猜的数大了
                start = mid+1;
            }
            if (start>end) {
                System.out.println("没有这个数");
                break;
            }
        }
        
​
    }
​
}
​

五、杨辉三角

package com.qu;
​
public class YangHui {
    public static void main(String[] args) {
        int n = 10;
        int[][] arr = new int[n][];
        for (int i = 0; i < n; i++) {
            arr[i] = new int[i+1];
            for (int j = 0; j <= i; j++) {
                if (j==0 || j==i) {
                    arr[i][j] = 1;
                    System.out.print(1+" ");
                }else {
                    arr[i][j] = arr[i-1][j]+arr[i-1][j-1];
                    System.out.print(arr[i][j]+" ");
                }
            }
            System.out.println();
        }
    }
}
​

六、Arrays工具类

①打印多维数组(deepToString)

int[][] arr = {{1,2}{2,3}};
System.out.println(Arrays.deepToString(arr));

②binarySearch,二分查找(有返回值)

int[][] arr3 = {1,2,3,5,21,4};
int num = Arrays.binarySearch(arr3,5);
System.out.println(num); //4 找得到就返回索引,找不到就是负数

③排序 sort

Arrays.sort(arr3);//这个工具类只能从小到大排序
System.out.println(Arrays.toString(arr3));

④替换数组指定角标位置元素,fill

Arrays.fill(arr3,0,2,666);//把索引位0-2的替换成666,左闭右开
System.out.println(Arrays.toString(arr3));//[666,666,3,5,21,4]

⑤截取数组(copyOfRange)有返回值

int arr4 = Arrays.copyOfRange(arr3,0,2);//左闭右开
​
System.out.println(Arrays.toString(arr4));//[1,2]

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值