时间复杂度

  • 选择排序(找到数组中的最小那个值放在最前)

public static void select(int [] arr){
    for (int i=0;i<arr.length;i++) {
        for (int j=i+1;j<arr.length;j++){
            if(arr[i]<arr[j]){
                swap(i,j,arr);
            }
        }

        }
    }
  • 冒泡排序(对两个相邻之间的数比较每次比较后最大那个数位置正确)

public static  void mao(int [] arr){
    for (int y=0;y<arr.length-1;y++){
    for (int x=0;x<arr.length-1;x++){
        if (arr[x]>arr[x+1]){
            swap(x,x+1,arr);
        }
    }
    }


}
//通过异或运算对数进行置换
public static void swap(int x,int y,int []arr){
    arr[x]=arr[x]^arr[y];
    arr[y]=arr[x]^arr[y];
    arr[x]=arr[y]^arr[x];
}
异或运算(同0得1,异为0)

性质:

  1. 可以当成无进位的加法
  2. 0^n=n n^n=0
  3. 满足交换与结合
  4. int a=甲 int b=乙

a=a^b; a=甲^乙 b=乙

b=a^b; a=甲^乙 b=甲

a=a^b; b=甲 a=甲

tip:a,b的地址区不能相同

  • 如果一个数有奇数次,其他数都为偶数怎么找出这个数

public static void demo1(int [] arr){
    int err = arr[0];
    for (int i = 1; i < arr.length; i++) {

        err=err^arr[i];
    }
    System.out.println(err);

}
  • 如果两个数有奇数次,其他数都为偶数怎么找出这两个数

/*
    利于多次异或最后只剩下a^b
    对a,b进行分类利用最右侧的1进行分类分别进行异或
*/
public static void demo2(int [] arr){
    int err=arr[0];
    int err1=0;
    for (int i = 1; i <arr.length ; i++) {
        err=err^arr[i];
    }
    int only_one=err&(~err+1);//取出err最右边的1
    for (int z = 0; z < arr.length; z++) {
        if((arr[z]&only_one)==1){
            err1=arr[z]^err1;

        }


    }
    int temp=err1^err;
    System.out.println(err1+"另一个"+temp);


}
  • 插入排序

public static void insert(int[] arr){
    for (int i = 1; i < arr.length; i++) {
        for (int j = i; j <arr.length&&j>=0 ; j--) {
            if (arr[i]<arr[j]){
                swap(i,j,arr);
            }

        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值