一些简单排序与或非运算

package 排序;

public class 交换 {
    public static void main(String[] args) {
        int a = 12;
        int b = 23;
        a = a^b;
        b = a^b;
        a = a^b;
        System.out.println(a);
        System.out.println(b);
    }
    //利用^运算来实现交换
}

^运算的几点性质
1.0^N = N, N^N = 0
2.无进位加法
3.交换结合

 

//只有一个奇数其他都是偶数
package 排序;

public class 一奇其他都是偶数 {
    public static void main(String[] args) {
        int []a = {1,1,5,6,5,6,9};
        int eor = 0;
        for(int i = 0; i < a.length; i ++)
        {
            eor = eor^a[i];
        }
        System.out.println(eor);
    }
}
//^运算满足交换律,结合律嗷嗷

  

package 排序;

public class 二奇其他都是偶数 {
    public static void main(String[] args) {
        int []a = {1,1,2,3,5,3,6,5};//2,6
        int eor = 0;
        for(int cur:a)
        {
            eor = cur^eor;
        }
        //eor =2^6
        int zuo = eor&(~eor + 1);//找到最右边为1的,可以让他划分区域
        int eor1 = 0;
        for(int cur : a)
        {
            if((zuo&cur)==0)
            {
                eor1 = cur^eor1;
            }
        }
        System.out.println("第一个数" + eor1 +" "+ "第二个数"+ (eor^eor1));
    }
}

  插入排序我利用自己随机生成的数来进行排序

package 排序;

import java.util.Arrays;

import static java.util.function.Predicate.isEqual;


public class 插入排序 {
    public static void main(String[] args) {
        int time = 10;
        int maxsize = 100;
        int maxvlaue = 100;
        boolean success = true;
        for(int i = 0 ; i < time; i ++)
        {
            int []arr1 = getrandomarr(maxsize,maxvlaue);
            sort(arr1);
            int []arr2 = Arrays.copyOf(arr1,arr1.length);
            Arrays.sort(arr2);
            if(!arr1.equals(arr2))
            {
                success = false;
                System.out.println("失败");
                break;
            }

        }



    }
    public static int[] getrandomarr(int maxsize, int maxvlaue)
    {
        //(int)(Math.random() * N)
        int []arr = new int[(int)(Math.random() * (maxsize + 1))];//随机长度
        for(int k = 0; k < arr.length; k++)
        {
            arr[k] = (int)(Math.random() * (maxvlaue + 1)) - (int)(Math.random() * (maxvlaue + 1));//两个随机值相减表示随机数也随机
        }
        return arr;
    }
    //dui'shu'qi
    public static void sort(int []a)
    {
        //0-0
        //0-i
        for(int i = 1;i < a.length ; i ++)
        {
            for(int j = i-1;j>=0 && a[j] > a[j + 1]; j--)
            {
                swap(a,j,j+1);
            }
        }
        /*for(int cur:a)
        {
            System.out.print(cur +" ");
        }
        System.out.println("//");*/
    }
    public static void swap(int []a,int j,int k)
    {
        a[j] = a[j]^a[k];
        a[k] = a[k]^a[j];
        a[j] = a[j]^a[k];
    }
    //最差的时间复杂O(N^2),这个跟冒泡不一样,冒泡不管是不是都直接要交换,插入排序比冒泡会好一点
}

  

posted @ 2021-12-27 21:00  爽爽子的秃头生活  阅读(115)  评论(0)    收藏  举报