算法和数据结构新手班第1节

打印一个整型的二进制

public class PrintBinary {
    public static void main(String[] args) {
        int num = 200;
        printBrnary(num);
        
    }

    public static void printBrnary(int num) {
        for (int i = 31; i >= 0; i--) {
            int a = (num & 1 << i) == 0 ? 0 : 1;
            System.out.print(a);
        }
    }
}

位移运算符

&:将两个数计算后输出一个数

<<:将一个数经过二进制计算后的到另一个数

一个数取反加一表示这个数的相反数,例如:

+1的二进制为00000000 00000000 00000000 00000001

取反为           111111111 111111111 111111111   11111110

加一为

- 1的二进制为111111111 111111111 111111111 111111111

32位二进制可以表示2^32个数字,但其中一半是负数,一半是0和正数

32位的首位为0的为正数或0,首位为1的为负数

但是-2^32取反加一还是本身

题目一

给定一个参数N

返回:  1! + 2! + 3! + 4! + … + N!   的结果

public class A {
    public static void main(String[] args) {
        int n = 4;
        long b = a(n);
        System.out.println(b);
    }

    public static long a(int n) {
        int add = 0;
        int mul = 1;
        for (int i = 0; i < n; i++) {
            mul *= i + 1;
            add += mul;
        }
        return add;
    }
}

题目二

将一个数组按升序生成另一数组

1.选择排序:将0到最后一位遍历,将最小的数放在0位置

                     将1到最后一位遍历,将最小的数放在1位置

                     …………………………………………………

                    …………………………………………………

2.冒泡排序:将0到倒数第一位遍历,将最大的数放在倒数第一位

                     将0到倒数第二位遍历,将最大的数放在倒数第二位

                    ……………………………………………………………

                    ……………………………………………………………

3.插入排序:将0-1位置变有序,将0-2位置变有序…………

public class Sort {
    public static void main(String[] args) {
        int wrong = 0;
        for (int i = 0; i < 10000; i++) {
            int[] arr = randomArr(1, 5, 3);
            int[] arr2 = java.util.Arrays.copyOf(arr, arr.length);
            insertionSort(arr);
            java.util.Arrays.sort(arr2);
            if (!java.util.Arrays.equals(arr, arr2)) {
                wrong++;
            }
        }
        System.out.println("错了" + wrong + "次");
    }

    static int[] randomArr(int min, int max, int length) {
        int[] arr = new int[length];
        for (int i = 0; i < arr.length; i++) {
            arr[i] = (int) (Math.random() * (max - min + 1)) + min;
        }
        return arr;
    }

    public static void selectionSort(int[] arr) {
        //选择排序
        for (int i = 0; i < arr.length; i++) {
            int minVauleIndex = i;
            for (int j = i; j < arr.length; j++) {
                if (arr[j] < arr[minVauleIndex]) {
                    minVauleIndex = j;
                }
            }
            swap(arr, i, minVauleIndex);
        }
    }

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

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


    static void swap(int[] arr, int a, int b) {
        //交换一个数组的两个数的位置
        int num = arr[a];
        arr[a] = arr[b];
        arr[b] = num;
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值