数据结构与算法

数据结构与算法

这是记录数据结构的原理以及到算法的一个分享,如果大家觉得有什么问题,或者是觉得我哪些地方错了,欢迎大家留言,我会及时的回复大家消息,如果能帮到你一些的话,希望可以点个赞,最后感谢大家来看我写的文章


提示:选择你感兴趣的去看吧


前言

提示:为什么要做这个分享?


1.什么是数据结构?

2常见的数据结构

3.什么是算法

  • 1.有具体的问题
  • 2.有涉及解决这个问题的具体流程
  • 3.有评价处理流程的可量化指标
  • 4.有穷性

从怎么算不知道怎么试算出结果–>既直到怎么算,也知道怎么尝试算出
所谓的图灵机就是找出一个原型把不知道怎么算但是知道怎么试的东西变成理论
计算机科学之所以称为科学是因为我们明确知道怎么尝试的流程,才使得我们这个科学变得有魅力变成一个计算科学

4.什么是复杂度

5.手写数据结构-Java版

6.数组

7.链表

8.队列

9.栈

10.树

11. 二叉树

12.二叉树常用算法

13.二叉搜索树

14.二叉平衡树

15.红黑树

16.B树

17.B+树

18.堆

19.图

20.位图

21.跳跃表

22.散列表

23.Java中的组合数据结构

24.常见算法

25.简单位运算

26.排序算法

(1)选择排序

选择排序1:

    public void selectionSort(int[] arr) {

        if (arr == null || arr.length < 2) {
            return;
        }
        for (int i = 0; i < arr.length; i++) {

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

     public static void swap(int[] arr, int x, int y) {
        int tempVal = arr[x];

        arr[x] = arr[y];

        arr[y] = tempVal;
    }

选择排序2:

public static void selectionSort(int[] arr) {

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

        for (int i = 0; i < arr.length; i++) {

            int minVal = i;
            for (int j = i + 1; j < arr.length; j++) {
                minVal = arr[minVal] < arr[j] ? minVal : j;
            }
            swap(arr, i, minVal);
        }

    }

    public static void swap(int[] arr, int x, int y) {
        int tempVal = arr[x];

        arr[x] = arr[y];

        arr[y] = tempVal;
    }

(1)冒泡排序

冒泡排序1:

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

    public static void swap(int[] arr, int x, int y) {
        int tempVal = arr[x];

        arr[x] = arr[y];

        arr[y] = tempVal;
    }

冒泡排序2:

 public static void bubbleSort2(int[] arr) {
        if (arr == null || arr.length < 1) {
            return;
        }
        int len = arr.length;
        boolean flag = true;
        for (int i = len - 1; i >= 0; i--) {
            for (int j = 1; j <= i; j++) {
                if (arr[j] < arr[j - 1]) {
                    swap(arr, j, j - 1);
                    flag = false;
                }
            }
            if (flag) {
                break;
            }
        }
    }
 public static void swap(int[] arr, int x, int y) {
        int tempVal = arr[x];

        arr[x] = arr[y];

        arr[y] = tempVal;
    }

冒泡排序3:

public static void bubbleSort3(int[] arr) {
        if (arr == null || arr.length < 1) {
            return;
        }
        int n = arr.length - 1;
        while (true) {

            int last = 0;

            for (int i = 0; i < n; i++) {
                if (arr[i] > arr[i + 1]) {
                    swap(arr, i, i + 1);
                    last = i;
                }
            }
            n = last;
            if (n == 0) {
                break;
            }

        }
    }

    public static void swap(int[] arr, int x, int y) {
        int tempVal = arr[x];

        arr[x] = arr[y];

        arr[y] = tempVal;
    }

冒泡排序4:

(3)插入排序

(4)希尔排序

(5)快速排序

(6)归并排序

(7)堆排序

(8)桶排序

(9)基数排序

(10)计数排序

(11)随机排序

27.对数器–随机测试结果

28.算法问题–简单问题求解

1.求1! +2! +3! +…N!的阶乘
第一种暴力求解:

   public int result(int i) {

        int sum = 0;
        for (int j = 1; j <= i; j++) {
            sum += factorial(j);
        }
        return sum;
    }


    public int factorial(int i) {

        int cur = 1;

        for (int j = 1; j <= i; j++) {
            cur *= j;
        }
        return cur;
    }
    

第二种:代码优化

 public int result(int i) {

        int cur = 1;

        int sum = 0;

        for (int j = 1; j <= i; j++) {
            cur *= j;
            sum += cur;
        }
        return sum;
    }

java打印多边形

 /**
     * 打印正方形
     */

    public static void printSquare(int n) {
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                System.out.print("* ");
            }
            System.out.println();
        }
    }

    /**
     * 打印三角形
     */
    public static void printTriangle(int n) {
        for (int i = 0; i < n; i++) {
            for (int j = 0; j <= i; j++) {
                System.out.print("* ");
            }
            System.out.println();
        }
    }

    /**
     * 打印倒三角形
     */
    public static void printHandstandTriangle(int n) {
        for (int i = 0; i < n; i++) {
            for (int j = n - 1; j >= i; j--) {
                System.out.print("* ");
            }
            System.out.println();
        }
    }

    /**
     * 打印正实心三角
     */
    public static void printRealTriangle(int n) {

        for (int i = 1; i <= n; i++) {
            //第一层打印1,第二层打印3,第三层打印5

            for (int j = n; j > i; j--) {
                System.out.print(" ");
            }
            for (int j = 1; j <= 2 * i - 1; j++) {
                System.out.print("*");
            }
            System.out.println();
        }
    }

    /**
     * 打印倒实心三角
     */
    public static void printNoRealsTriangle(int n) {
        for (int i = n; i > 0; i--) {

            for (int j = 0; j <= n - i; j++) {
                System.out.print(" ");
            }
            for (int j = 0; j < 2 * i - 1; j++) {
                System.out.print("*");
            }
            System.out.println();
        }
    }

    /**
     * 打印菱形
     */
    public static void printRhombus(int n) {
        printRealTriangle(n);
        printNoRealsTriangle(n - 1);
    }

    /**
     * 打印心形
     * 爱心的公式 (x²+y²-1)³-x²*y³=0
     */
    public static void printheartShaped() {
        for (float y = (float) 1.5; y > -1.5; y -= 0.1) {
            for (float x = (float) -1.5; x < 1.5; x += 0.05) {
                float a = x * x + y * y - 1;
                if ((a * a * a - x * x * y * y * y) <= 0.0) {
                    System.out.print("*");
                } else {
                    System.out.print(" ");
                }

            }
            System.out.println();
        }

    }

29.算法问题–滑动窗口

30.算法问题–链表

31.算法问题–递归

32.算法问题–程序设计

33.算法问题–树

34.算法问题–图

35.算法问题–动态规划

36.算法问题–贪心算法

37.算法问题–数学求解

38.算法问题–脑筋急转弯

39.算法问题–最贵算法

总结

提示:这里对文章进行总结:

例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值