Compare commits
	
		
			3 Commits
		
	
	
		
			598b238632
			...
			fec07bb8d0
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| fec07bb8d0 | |||
| 656ecf0104 | |||
| 64c929e820 | 
| @ -1,7 +1,8 @@ | ||||
| --- | ||||
| title: Ubuntu 22.04.1 清理安装失败或配置错误的软件包 | ||||
| date: 2022-12-31 | ||||
| tags: Ubuntu | ||||
| tags:  | ||||
|     - Ubuntu | ||||
| --- | ||||
| 
 | ||||
| 目前开发的笔记本使用的是ubuntu22.04.1 版本,时间长了系统里面或出现一些安装失败或配置错误的软件包,记录一下处理该问题的方法。 | ||||
| @ -9,6 +10,7 @@ tags: Ubuntu | ||||
| ## 解决办法 | ||||
| 
 | ||||
| > 命令如下: | ||||
| 
 | ||||
| ```shell | ||||
| # root  账号无需加上sudo | ||||
| sudo apt purge $(dpkg -l|grep ^rc|awk '{ print $2 }') | ||||
| @ -16,10 +18,12 @@ sudo apt purge $(dpkg -l|grep iF|awk '{ print $2 }') | ||||
| ``` | ||||
| <!--more--> | ||||
| > 注解: | ||||
| 
 | ||||
| 1. `$(......)` 是一个shell表示法,即里面包含括号中的命令输出的内容。 | ||||
| 2. `dpkg -l`列出系统中所有安装的软件,如果是已经删除的软件(有残存的配置文件),那么该的软件包的状态是rc,即开头显赫为rc 然后是空格,然后是软件包的名称。如果是iF开头就是配置失败的软件。 | ||||
| 3. `grep ^rc` 的用处就是找出状态为rc的所有软件包,即以rc开头的行。`|awk '{ print $2 }'` awk可以将输入的字符串用指定的分隔符进行分解,缺省情况下是空格,$2是表示第二个字段,也就是软件包的名称,因为第一个字段是 rc。 | ||||
| 4. `apt-get purge` 就是彻底删除软件包(包括配置文件),如果是残存的配置文件,也可以用这种方式删除。 | ||||
| 
 | ||||
| ## 参考 | ||||
| 
 | ||||
| 1. [Ubuntu清理配置错误或安装失败的包](https://neilwan.com/views/linux/ubuntu_clean_install_failed_package.html) | ||||
|  | ||||
							
								
								
									
										80
									
								
								_posts/算法/algorithm-demo.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										80
									
								
								_posts/算法/algorithm-demo.md
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,80 @@ | ||||
| --- | ||||
| title: 👶一些简单算法PHP实现 | ||||
| date: 2024-08-16 | ||||
| tags:  | ||||
|     - 算法 | ||||
| --- | ||||
| 
 | ||||
| 这里介绍一些简单的算法,包括:冒泡排序、快速排序、二分查找、二叉树的遍历、二叉树的层次遍历、二叉树的前序、中序、后序遍历,一些简单的实现。 | ||||
| 
 | ||||
| ## 冒泡排序 | ||||
| 
 | ||||
| ```php | ||||
| function bubble_sort($arr) | ||||
| { | ||||
|     $n = count($arr); | ||||
|     for ($i = 0; $i < $n; $i++) { | ||||
|         for ($j = 0; $j < $n - $i - 1; $j++) { | ||||
|             if ($arr[$j] < $arr[$j + 1]) { | ||||
|                 [$arr[$j], $arr[$j + 1]] = [$arr[$j + 1], $arr[$j]]; | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|     return $arr; | ||||
| } | ||||
| 
 | ||||
| ``` | ||||
| 
 | ||||
| > 冒泡排序过程的详细步骤,假设我们有一个数组 [64, 34, 25, 12, 22, 11, 90] 需要进行升序排序: | ||||
| 
 | ||||
| 1. 第一轮冒泡: | ||||
|     - 比较 64 和 34,64 > 34,交换它们的位置,数组变为 [34, 64, 25, 12, 22, 11, 90] | ||||
|     - 比较 64 和 25,64 > 25,交换它们的位置,数组变为 [34, 25, 64, 12, 22, 11, 90] | ||||
|     - 比较 64 和 12,64 > 12,交换它们的位置,数组变为 [34, 25, 12, 64, 22, 11, 90] | ||||
|     - 比较 64 和 22,64 > 22,交换它们的位置,数组变为 [34, 25, 12, 22, 64, 11, 90] | ||||
|     - 比较 64 和 11,64 > 11,交换它们的位置,数组变为 [34, 25, 12, 22, 11, 64, 90] | ||||
|     - 比较 64 和 90,64 < 90,不需要交换,这一轮结束 | ||||
| 
 | ||||
|     第一轮冒泡后,最大的数 90 被“冒泡”到了数组的最后一位。 | ||||
| 
 | ||||
| 2. N轮冒泡: | ||||
| 
 | ||||
| 对除了最后一个元素之外的所有元素进行上述相同的比较和交换操作,这一轮结束后,次大的数 64 被放到了倒数第二位。重复上述过程,每一轮都将未排序部分的最大值“冒泡”到已排序部分的末尾。每一轮冒泡都会使未排序部分的长度减少 1当整个数组遍历一遍而没有任何元素交换时,表示数组已经排序完成。 | ||||
| 
 | ||||
| 经过多轮冒泡后,数组 [64, 34, 25, 12, 22, 11, 90] 逐渐被排序为 [11, 12, 22, 25, 34, 64, 90]。 | ||||
| 
 | ||||
| 冒泡排序的平均时间复杂度和最坏时间复杂度都是 O(n^2),其中 n 是数组的长度。因此,它不适合对大数据集进行排序 | ||||
| 
 | ||||
| ## 快速排序 | ||||
| 
 | ||||
| ```php | ||||
| function quick_sort(array $array) | ||||
| { | ||||
|     if (count($array) < 2) { | ||||
|         return $array; | ||||
|     } | ||||
|     reset($array); | ||||
|     $pivot_key = key($array); | ||||
|     $pivot     = array_shift($array); | ||||
|     $left      = $right = []; | ||||
|     foreach ($array as $k => $v) { | ||||
|         if ($v > $pivot) { | ||||
|             $right[$k] = $v; | ||||
|         } else { | ||||
|             $left[$k] = $v; | ||||
|         } | ||||
|     } | ||||
|     return array_merge(quick_sort($left), [ | ||||
|         $pivot_key => $pivot | ||||
|     ], quick_sort($right)); | ||||
| } | ||||
| 
 | ||||
| ``` | ||||
| 
 | ||||
| > 快速排序过程的简化描述 | ||||
| 
 | ||||
| 1. 假设数组为 [8, 4, 5, 7, 1, 3, 6, 2] | ||||
| 2. 选择第一个元素 8 作为基准 | ||||
| 3. 分区后数组变为 [4, 1, 3, 2, 8, 5, 7, 6](8 在中间) | ||||
| 4. 递归地对 8 左边的子数组 [4, 1, 3, 2] 和右边的子数组 [5, 7, 6] 进行排序 | ||||
| 5. 最终数组变为 [1, 2, 3, 4, 5, 6, 7, 8] | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user