写点什么

算法,从今天开始

用户头像
ES_her0
关注
发布于: 1 小时前

作为一名长期的 CRUD 或者说 spring 工程师,算法甚至从没出现在我的职业生涯中。大学没学过,工作以来 99.9%的时间也没用过。我是那种在鄙视链底端的代码打字员,就是又写 Java 又写业务,业务上就是 spring+mybatis 一把梭,Java 也就增删改查,能有什么机会碰到算法呢,实际上也确实没有。


开个小玩笑,有时候自嘲也未必是件坏事,其实 Java 或者其他任何语言本质上没有区别,各有优劣,术业有专攻,但 Java 可以快速实现业务同时也能保证一些性能和安全,招人也方便,这点上别的任何语言都做不到的。Java 也在不断进化,至少在 Java 这条路上深耕下去对饭碗来说是安全的。回到我自身,写了好几年 Java 业务之后,总有一种在原地踏步的感觉,在寻找各种突破口来提升自己。学习新的框架和架构理念似乎是一条靠谱的路,业务相对稳定,引入新框架新技术的成本太高,如果不用新框架又很难把自己的所学融入到自己的知识体系中。这个时候便想到了算法。

抽象是 Java 的精髓,算法是所有语言的精髓。同时也是各大公司面试必不可少的环节,临时准备起来还是挺痛苦的。所以把算法当作一个日常的技能训练是一个不错的选择。刚开始会很难,就像健身一样,一个肥宅做俯卧撑难吗?恐怕涨红大脸只能做 10 个,真的太难了。但如果每天坚持 5 个,半个月之后每天 10 个,坚持下去,很快就能做 20 个,30 个。彭于晏说,有时候只有坚持下去才能看到希望。人往往是短视的,意志不坚定就容易被眼前的困难吓倒。

所以不妨就从简单的开始吧。我们总在说排序,不如就从排序开始,慢慢接触,慢慢熟悉。但在开始学排序之前,我们得做一些准备工作。下面分享我的一些小工具出来。

开发工具

算法的练习不需要什么强大的 IDE,用 vscode 或者 idea 的 community 版本即可,我个人推荐还是第二个,当然如果你有商业版最好了。

新建项目

新建一个基础的 maven 项目就好了。为什么要用 maven 呢,当要用到什么工具类时可以随便添加依赖,也可以写单测来做一些验证,就不要总是用 main 函数了。

工具类

简单分享 2 个排序要用的工具类,写的比较随意,但是能用。

  1. 生成随机数组

public static Integer[] genRandomArray(Integer size, Integer start, Integer end) {    Integer[] arr = new Integer[size];    Random random = new Random(System.currentTimeMillis());    for (int i = 0; i < size; i++) {        arr[i] = random.nextInt(end - start + 1) + start;    }    return arr;}复制代码
复制代码
  1. 验证数组是否已排序

public static void testSort(String funcName, BiConsumer<Integer[], Integer> biConsumer,                            Integer[] arr, Integer size) {    long start = System.currentTimeMillis();    biConsumer.accept(arr, size);    long end = System.currentTimeMillis();    long timeSec = (end - start) / 1000;    System.out.println(funcName + ": " + timeSec + "s");    assert isSorted(arr, size);}
public static boolean isSorted(Integer[] arr, Integer size) { for (int i = 0; i < size - 1; i++) { if (arr[i] > arr[i + 1]) { return false; } } return true;}复制代码
复制代码
  1. 两个值交换,Java 的交换比较特殊

public static void swap(Integer[] arr, int a, int b) {    Integer temp = arr[a];    arr[a] = arr[b];    arr[b] = temp;}
复制代码


用户头像

ES_her0

关注

还未添加个人签名 2018.03.21 加入

还未添加个人简介

评论

发布
暂无评论
算法,从今天开始