第5期 ARTS 打卡计划

2020-06-24 10:37:15 浏览数 (1)

ARTS 起源

关于 ARTS:一个需要持续地坚持的高效学习项目,每周写一个ARTS:Algorithm 是一道算法题,Review 是读一篇英文文章,Tips 是分享一个小技术,Share 是分享一个观点。

本周 ARTS
  • A: 快速排序
  • R: The Problem With Logging
  • T: vim 操作文件如何显示行号
  • S: 掌握 SOLID 设计原则

Algorithm:快速排序

来源:《漫画算法》

如何用代码来实现【快速排序】算法。

思路:分治法 & 递归

通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

代码语言:javascript复制
public static void quickSort(int[] array, int startIndex, int endIndex) {
    // 递归结束条件
    if (startIndex >= endIndex) {
        return;
    }
    // 获取基准元素位置
    int pivotIndex = partition(array, startIndex, endIndex);
    // 以基准元素为界,分成两部分递归排序
    quickSort(array, startIndex, pivotIndex - 1);
    quickSort(array, pivotIndex   1, endIndex);
}

private static int partition(int[] array, int startIndex, int endIndex) {
    // 取第一个位置为基准元素(0)
    int pivot = array[startIndex];
    int left = startIndex;
    int right = endIndex;
    // 控制 left 指针右移,right 指针左移,直至相碰结束
    while (left != right) {
        // right 比较,大于基准就左移,小了停止;
        while (left < right && array[right] > pivot) {
            right--;
        }
        // left 比较,小于基准就右移,大了停止;
        while (left < right && array[left] <= pivot) {
            left  ;
        }
        // right 和 left 都停止后进行交换
        if (left < right) {
            int temp = array[left];
            array[left] = array[right];
            array[right] = temp;
        }
    }
    //基准与left和right相交位置进行交换
    int tmp = array[left];
    array[left] = array[startIndex];
    array[startIndex] = tmp;

    // 返回当前的基准位置
    return left;
}

Review:The Problem With Logging

来源:《左耳听风》推荐

https://blog.codinghorror.com/the-problem-with-logging/ 评论:不要过度使用日志 在文章中作者表达对程序打印日志行为的看法,并抵制程序过度打印日志的做法。最后作者推荐日志记录尽量简单短小,主要在明显和关键的错误上进行日志记录。对于特定需求,只加少量的日志。

Tip:vim 操作文件如何显示行号

方法一:单文件显示

在 vim 命令模式下,输入 : set nu

nu 是 number 的缩写。

方式二:全局配置显示

找到 ~/.vimrc 文件或者 /etc/vimrc 文件,添加一行 set nu 即可。

扩展:如何跳转到指定行

在 vim 命令模式下,输入 :n 指令,跳转到第 n 行。

Share:掌握 SOLID 设计原则

主题:深入理解 SOLID 设计原则
地址

https://www.yuque.com/docs/share/714e08c7-1d6a-4670-a4cb-8aa026f43ada?#

0 人点赞