1.熟悉的排序算法有哪些,它们的时间空间复杂度如何?
排序算法主要分为内部排序和外部排序。内部排序指的是数据记录在内存中进行排序,而外部排序则适用于排序的数据量很大,一次不能容纳全部排序记录的情况,需要在排序过程中访问外存。
常见的内部排序算法包括插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。
- 插入排序:通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序是稳定排序。
- 希尔排序:是插入排序的一种更高效的改进版本。希尔排序是非稳定排序算法。
- 选择排序:在每一趟从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。选择排序是不稳定排序。
- 冒泡排序:重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序错误就把他们交换过来。走访元素的工作是重复地进行直到没有再需要交换,也就是说该元素列已经排序完成。冒泡排序是稳定排序。
- 归并排序:是建立在归并操作上的一种有效,稳定的排序算法,该算法是采用分治法的一个非常典型的应用。
- 快速排序:是由冒泡排序改进而来的。在冒泡排序过程中,只对相邻的两个元素进行比较,因此每次交换两个相邻的元素时只能消除一个逆序。快速排序方法中的一次交换可能消除多个逆序,从而大大加快排序的速度。快速排序是不稳定排序。
- 堆排序:是利用堆这种数据结构而设计的一种排序算法。堆排序是一种选择排序,它的最坏、最好、平均时间复杂度均为O(nlogn),它也是不稳定排序。
- 基数排序:按照低位先排序,然后收集;再按照高位排序,然后再收集;以此类推,直到最高位。有时候有些属性是有优先级顺序的,先按低优先级排序,再按高优先级排序。基数排序是稳定排序。
2. 谈谈关于SHELL脚本三剑客?
-
grep:
- 功能:grep是一个强大的文本搜索工具,它使用正则表达式搜索文本,并将匹配的行打印出来。
- 应用场景:grep常用于在文件中查找包含特定模式的行,例如查找包含某个关键词的日志文件、配置文件等。
- 示例:
grep 'error' logfile.txt
会在logfile.txt
中查找包含“error”的行并打印出来。
-
awk:
- 功能:awk是一个强大的文本分析工具,它不仅可以像grep一样进行模式匹配和文本搜索,还可以对匹配到的行进行复杂的文本处理和数据提取。awk支持使用变量、条件语句、循环等编程结构,使其功能更加强大和灵活。
- 应用场景:awk常用于数据分析和报表生成,例如从日志文件中提取特定字段的数据、统计某个字段的出现次数等。
- 示例:
awk '{print $1}' data.txt
会打印data.txt
文件中的第一列数据。
-
sed:
- 功能:sed是一个流编辑器,用于对输入流(或文件)进行基本的文本转换。它可以执行删除、替换、插入等操作,并支持使用正则表达式进行模式匹配。
- 应用场景:sed常用于文本替换和修改,例如批量替换文件中的某个字符串、删除文件中的空行等。
- 示例:
sed 's/old/new/g' file.txt
会将file.txt
文件中的所有“old”替换为“new”。