算法学习全部合集

1.32位位运算

package d0;

import java.util.Scanner;

public class Code1 {
    public static void main(String[] args) {
       int num=1023;
       print(num);
       int test=1;
       print(test);
       print(test<<1);
       print(test<<2);

    }

    private static void print(int num) {
        for (int i = 31; i >=0; i--) {
            System.out.print((num&(1<<i))==0?"0":"1");
            /*
            & 1 1==1
            左移一位=*2
             */
        }
        System.out.println();
    }

}

2.阶乘相加

package d0;
public class Code2 {
    public static void main(String[] args) {
   int N=5;
        System.out.println(f2(N));
    }
    public static  long f2(int N) {
        long ans =0;
        long cur=1;
        for (int i = 1; i <= N; i++) {
            // 把上一回的阶乘保存
            cur=cur*i;
            ans=ans+cur;
        }
        return ans;
    }
}

3.选择排序

package d0;
// 选择排序
public class Code3 {
    // 0 N-1 找到最小值放在0上,直接搞过去
    // 1 N-1找到最小值放在1上
    // 2 N-1找到最小值放在2上
    // N-1 N-1找到最小值放在N-1上
    private static void selectSort(int[] arr) {
       if(arr == null || arr.length<2)
       {return;}
       int N=arr.length;
       for (int i = 0; i < N; i++) {
            // 0 N-1 找到最小值放在0上
            // 1 N-1找到最小值放在1上
            // 2 N-1找到最小值放在2上
            // N-1 N-1找到最小值放在N-1上
            int min=i;
            for (int j = i+1; j < N; j++) {
                min=arr[j]<arr[min]?j:min;// 第二位比第一位小,就返回第二位,并赋值
            }
            swap(arr,i,min);
        }
    }

    public static void swap(int[] arr,int i,int j){
        int t=arr[j];
        arr[j]=arr[i];
        arr[i]=t;
    }
    public static void printArray(int[] arr) {
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]+" ");
        }
        System.out.println();
    }

    public static void main(String[] args) {
        int []arr={10,20,30,40,50,680,12,62};
        printArray(arr);
        selectSort(arr);
        printArray(arr);
    }


}

4.冒泡排序

package d0;
// 冒泡排序
public class Code4 {
    // 0-n-1 两两交换
    //0-n-2 两两交换
    //0-n-3 两两交换
    private static void bubbleSort(int[] arr) {
        if(arr == null || arr.length<2)
        {return;}
    int N=arr.length;
        for (int end = N-1; end >=0; end--) {
// 0----end
            //01 12  23 34 45
            //second 是第二个01 的1
            for (int second = 1; second <=end; second++) {
                // 最开始是01 12 23 34 45 56
                if(arr[second-1]>arr[second])// 前面一个数大的话,交换位置,等待第二趟排序,再来一次
                {
                    swap(arr,second-1,second);
                }
            }
        }
    }
    public static void swap(int[] arr,int i,int j){
        int t=arr[j];
        arr[j]=arr[i];
        arr[i]=t;
    }
    public static void printArray(int[] arr) {
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]+" ");
        }
        System.out.println();
    }

    public static void main(String[] args) {
        int []arr={10,20,30,40,50,680,12,62};
        printArray(arr);
        bubbleSort(arr);
        printArray(arr);
    }




}

5.插入排序

package d0;

public class Code5 {
    //0-0 有序

    //0-1 有序 1向前看,后面比前面小,就往前放
    //0-2 有序 2向前看1,后面比前面小,就往前放
    //         1向前看0,后面比前面小,就往前放

    //0-3 有序
    // 3向前看2,后面比前面小,就往前放
    // 2向前看1,后面比前面小,就往前放
    //  1向前看0,后面比前面小,就往前放


    private static void insetSort(int[] arr) {
        //0-0
        //0-1
        //0-2
        //0-n-1
        int N=arr.length;
        for (int end = 1; end < N ; end++) {
            int newNumIndex=end;// 我一开始来到N的位置
            while(newNumIndex-1>=0 && arr[newNumIndex-1]>arr[newNumIndex])
                //有数 前面的数字大于后面数字交换,3<5 结束
            {
                swap(arr,newNumIndex-1,newNumIndex);
                newNumIndex--;
            }

        }
    }

    private static void insetSort2(int[] arr) {
        //0-0
        //0-1
        //0-2
        //0-n-1

        if(arr == null || arr.length<2)
        {return;}

        int N=arr.length;
        for (int end = 1; end < N ; end++) {
            // pre 新数
            // 6 7 当前7 pre=6  成立交换
            // 5 6 当前6 pre=5  成立交换
            for (int pre = end-1; pre >=0&&arr[pre]>arr[pre+1];pre--) {
                swap(arr,pre,pre+1);
            }

        }
    }

    public static void swap(int[] arr,int i,int j){
        int t=arr[j];
        arr[j]=arr[i];
        arr[i]=t;
    }
    public static void printArray(int[] arr) {
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]+" ");
        }
        System.out.println();
    }

    public static void main(String[] args) {
        int []arr={1,4,5,2,4,1,2,6,8,5,4,6,3,8,6};
        printArray(arr);
        insetSort(arr);
        printArray(arr);
        System.out.println("=========2=========");
        printArray(arr);
        insetSort2(arr);
        printArray(arr);
    }


}

6.选择排序

package day0算法;

public class Day2 {
    //选择排序
    public static void main(String[] args) {
        int []arr={9,8,7,6,5,4,3,2,1};
        printf(arr);
        selectSort(arr);
        printf(arr);
    }
    public static void printf(int []arr){
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]+" ");
        }
        System.out.println();
    }
    public static void selectSort(int[] arr){
        if(arr==null ||arr.length==1){
            return;
        }
        int N= arr.length;
        //0  n-1
        //1  n-1
        //2  n-1
        for (int i = 0; i < N; i++) {
            //zh找到最小值
        int min=i;
            for (int j = i+1; j <N ; j++) {
                min=arr[j]<arr[min]?j:min;// 后面的数比前面的小就交换
            }
            //做交换
            swap(arr,i,min);
        }
    }
    public static void swap(int[] arr,int i,int j){
        int t=arr[j];
        arr[j]=arr[i]; //j位置的数,等于i位置的数
        arr[i]=t;
    }
    
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python算法学习是指掌握使用Python语言来解决各种问题的方法和技巧。在学习过程中,有几个重要的方面需要注意。 首先,了解基本的算法概念是必不可少的。例如,了解常见的排序算法(如冒泡排序、快速排序)和查找算法(如二分查找)等。这有助于我们理解算法的原理和思想。 其次,学习Python中的内置数据结构和函数,如列表、字典和字符串等。熟悉这些数据结构和函数的使用方法,可以帮助我们更好地解决问题,并编写出高效的算法。 第三,了解常用的算法设计技巧。例如,贪心算法、动态规划和分治法等。这些算法设计技巧可以应用于不同类型的问题,帮助我们找到解决问题的最佳方法。 第四,编写和调试算法代码是学习过程中的关键步骤。我们可以通过编写小型的算法程序来练习和巩固所学的知识。同时,调试是解决代码错误和优化算法的重要环节,需要耐心和细心。 最后,不断练习和实践是提高算法能力的关键。我们可以通过刷题、参加编程比赛和项目实践等方式来提高自己的算法水平。与其他程序员交流和分享经验也是相互学习的好机会。 总之,Python算法学习是一个渐进的过程,需要不断学习、实践和提高。通过合理的学习方法和坚持不懈的努力,我们可以不断提高自己的算法能力,并运用它来解决实际问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值