算法与正则表达式

贵有恒,何必三更起、五更眠、最无益,只怕一日曝、十日寒。这篇文章主要讲述算法与正则表达式相关的知识,希望能为你提供帮助。
一、算法1、冒泡排序
类似气泡上涌的动作,会将数据在数组中从小到大或从大到小不断的向前移动。
基本思想:
冒泡排序的基本思想是对比相邻的两个元素值,如果满足条件就交换元素值,把较小的元素移动到数组前面,把大的元素移动到数组后面(也就是交换两个元素的位置),这样较小的元素就像气泡一样从底部.上升到顶部
算法思路:
冒泡算法由双层循环实现,其中外部循环用于控制排序轮数,一 般为要排序的数组长度减1次,因为最后一次循环只剩下一 一个数组元素, 不需要对比,同时数组已经完成排序了。而内部循环主要用于对比数组中每个相邻元素的大小,以确定是否交换位置,对比和交换次数随排序轮数而减少
?

#!/bin/bash
arr=(52 66 32 77 1 22 95)
echo "老的数组顺序为:$arr[@]"
length=$#arr[*]
for ((a=1; a< length; a++))
do
for ((b=0; b< length-a; b++))
do
first=$arr[$b]
c=$[b + 1]
second=$arr[$c]
if [ $first -gt $second ]
then
temp=$first
arr[$b]=$second
arr[$c]=$temp
fi
done
done
echo "排序后的数组顺序为:$arr[@]"







2、直接选择排序
直接选择排序:与冒泡排序相比,直接选择排序的交换次数更少,所以速度会快些
基本思想:
将指定排序位置与其它数组元素分别对比,如果满足条件就交换元素值,注意这里区别冒泡排序,不是交换相邻元素,而是把满足条件的元素与指定的排序位置交换(如从第一个元素开始排序),这样排序好的位置逐渐扩大,最后整个数组都成为已排序好的格式

#!/bin/bash
arr=(52 66 32 77 1 22 95)
echo "老的数组顺序为:$arr[@]"
length=$#arr[*]

for ((a=1; a< length; a++))#定义比较的轮数,从1开始,轮数为数组长度-1
do
index=0#定义当前比较轮中拥有最大值的元素下标的初始值为0
#!/bin/bash
arr=(52 66 32 77 1 22 95)
echo "老的数组顺序为:$arr[@]"
length=$#arr[*]

for ((a=1; a< length; a++))#定义比较的轮数,从1开始,轮数为数组长度-1
do
index=0#定义当前比较轮中拥有最大值的元素下标的初始值为0
#定义当前比较轮中的除了第一个元素的其他比较元素的下标的范围,会随着比较轮数的增加而减少,从1开始
for ((b=1; b< =length-a; b++))
do
XIAO=$arr[$b]#获取其他比较元素的值
DA=$arr[$index] #获取当前比较轮中最大元素的值
#通过拿其他比较元素的值与最大元素的值比较,获取当前比较轮的最大元素的下标
if [ $XIAO -gt $DA ]
then
index=$b
fi
done
#拿当前比较轮的最大元素的值与当前比较轮最后一个元素的值进行交换
last=$[$length - $a]#获取当前比较轮的最后一个元素的下标
temp=$arr[$last]#使用临时变量temp 获取当前轮的最后一个元素的值
arr[$last]=$arr[$index]#把当前轮中最大的元素的值赋给最后一个元素
arr[$index]=$temp#把原来最后一个元素的值赋给原最大的元素

done
echo "排序后的数组顺序为:$arr[@]"







这个直接选择排序与冒泡排序是很相似的,他们的区别是直接选择排序1轮只换位一次,与冒泡相比大大提高了速度。
3、反转排序
以相反的顺序把原有数组的内容重新排序
基本思想:
把数组最后一个元素与第一个元素替换,倒数第二个元素与第二个元素替换,以此类推,直到把所有数组元素反转替换
#!/bin/bash
arr=(1 2 3 4 5 6)
echo "排序前的数值顺序为: $arr[@]"
length=$#arr[@]
#拿对半分的前几个数作为参照物
for ((a=0; a< length/2; a++))
do
front=$arr[$a]#获取对半分前面的数值
backend=$arr[$length-1-$a]#获取对半分后面的值
#前后值进行交换
temp=$front
arr[$a]=$backend
arr[$length-1-$a]=$temp
done
echo "排序后的数值顺序为: $arr[@]"







二、一些命令(sort、uniq、tr、cut、split、eval )1.sort 排序命令
sort命令:以行为单位对文件内容进行排序,也可以根据不同的数据类型来排序;比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。
格式:
sort [选项] 参数
常用选项:
  • -f:忽略大小写,会将小写字母都转换为大写字母来进行比较。
  • -b:忽略每行前面的空格。
  • -n:按照数字进行排序。
  • -r:反向排序。
  • -u:等同于uniq,表示相同的数据仅显示一行。
  • -t:指定字段分隔符,默认使用[Tab]键分隔。
  • -k:指定排序字段。
  • -o < 输出文件> :将排序后的结果转存至指定文件。
不加选项默认按字母排序,首字母相同看第二个;小写在前,大写在后。
-f文件里行前有空格会排在前面
先建一个文件
?
?
?
2.uniq 去除重复行命令
【算法与正则表达式】用于报告或者忽略文件中连续的重复行,

    推荐阅读