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?#