Bash 三种排序算法的简单实现

Bash 三种排序算法的简单实现

1、冒泡算法1

从第一开始,取每个元素和,和后面元素比较,如果比自己大就和自己交换。

#!/bin/bash

typeset -a arry                                    #变量声明
if [[ $# -ne 0 ]];then
      for i in `seq 0 $(($#-1))`;do           #循环遍历$@赋值给数组
             arry[i]=$1
        shift
        done
else
  arry=( 1 4 7 2 5 8 3 6 9)                #设置默认值,当空输入时候使用
fi
echo "${arry[@]}"                           #输出原始顺序
long=${#arry[@]}
for j in `seq 0 $(($long-1))`;do

        for i in `seq 0 $((${#arry[@]}-1))`;do
                if [[ ${arry[$j]} -gt ${arry[$i]} ]];then    #从arry[0]开始与后面每一个比大小
                        a=${arry[$j]}
                        arry[$j]=${arry[$i]}
                        arry[$i]=$a
                        echo "${arry[@]}"
                else
                :    # echo "${arry[@]}"
                fi
        done
done

maopao1

执行结果,使用默认值

1 4 7 2 5 8 3 6 9
4 1 7 2 5 8 3 6 9
7 1 4 2 5 8 3 6 9
7 4 1 2 5 8 3 6 9
7 4 2 1 5 8 3 6 9
7 5 2 1 4 8 3 6 9
7 5 4 1 2 8 3 6 9
7 5 4 2 1 8 3 6 9
8 5 4 2 1 7 3 6 9
8 7 4 2 1 5 3 6 9
8 7 5 2 1 4 3 6 9
8 7 5 4 1 2 3 6 9
8 7 5 4 2 1 3 6 9
8 7 5 4 3 1 2 6 9
8 7 5 4 3 2 1 6 9
8 7 6 4 3 2 1 5 9
8 7 6 5 3 2 1 4 9
8 7 6 5 4 2 1 3 9
8 7 6 5 4 3 1 2 9
8 7 6 5 4 3 2 1 9
9 7 6 5 4 3 2 1 8
9 8 6 5 4 3 2 1 7
9 8 7 5 4 3 2 1 6
9 8 7 6 4 3 2 1 5
9 8 7 6 5 3 2 1 4
9 8 7 6 5 4 2 1 3
9 8 7 6 5 4 3 1 2
9 8 7 6 5 4 3 2 1

2、冒泡2

相邻元素两两比较,如果后面比前面小就交换

#!/bin/bash
typeset -a arry
arry=(1 4 7 2 5 8 3 6 9)
long=${#arry[@]}
b=$long
for j in `seq 0 $b`;do

        for i in `seq 0 $((${#arry[@]}-2))`;do
                if [[ ${arry[$i]} -gt ${arry[$(($i+1))]} ]];then
                        a=${arry[$(($i+1))]}
                        arry[$(($i+1))]=${arry[$i]}
                        arry[$i]=$a
                        echo "${arry[@]}"  
                else
                        :       #echo "${arry[@]}"
                fi
        done
done

执行结果:

1 4 2 7 5 8 3 6 9
1 4 2 5 7 8 3 6 9
1 4 2 5 7 3 8 6 9
1 4 2 5 7 3 6 8 9
1 2 4 5 7 3 6 8 9
1 2 4 5 3 7 6 8 9
1 2 4 5 3 6 7 8 9
1 2 4 3 5 6 7 8 9
1 2 3 4 5 6 7 8 9

3、快速排序

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

for i in `seq 0 "$(($#-1))"`;do
        a[i]=${!i}  #eval echo \$$i $$-->pid
done

echo ${a[@]}
swap()  
{
    tmp=${a[$1]}
    a[$1]=${a[$2]}
    a[$2]=$buff
}

typeset -i t
fun()  
{
    i=$(($1-1))
    j=$1
    t=${a[$2]}
    if test $1 -ge $2 ;then
        return 2
    fi
        while [ $j -le $2 ];do
         while   [ $j -lt $2 -a ${a[$j]} -gt $t ] ;do
             j=$(($j+1))
            done
            i=$(($i+1))
            swap $i $j
            j=$(($j+1))
        done
     fun 0 $(($i-1))
 fun $(($i+2)) $2
}
fun 0 $((${#a[@]}-1))
for((i=0;i<$((${#a[@]}-1));i++))
{
    echo -n ${a[$i]} " "  
}
echo  
exit 0

执行结果

[root@localhost ~]# bash sort2.sh 1 5 8 2 4 7 3 6 9 0 40 12 32 8 12 13
1 5 8 2 4 7 3 6 9 0 40 12 32 8 12 13
0  1  2  3  4  5  6  7  8  8  9  12  12  13  32  40  

qucik_sort

原创文章,作者:phosphor,如若转载,请注明出处:http://www.178linux.com/79540

(0)
phosphorphosphor
上一篇 2017-07-09 13:56
下一篇 2017-07-09 16:21

相关推荐

  • linux三剑客之awk

    awk             简介:是一个优良的文本处理工具,Linux及Unix环境中现有的功能最强大的数据处理引擎之一。这种编程及数据操作语言的最大功能         &n…

    Linux干货 2016-12-05
  • SHELL中的变量

    SHELL中的变量            运行SHELL脚本中的单个命令自然有用,但这有其自身的限制。通常你会需要在SHELL命令使用其他数据来处理信息。这可以通过变量来实现。变量允许你临时性地将信息存储在SHELL脚本中,以便和脚本中的其他命令一起使用。 1 环境变量…

    Linux干货 2017-04-16
  • 虚拟主机的实现

    示例1:基于ip 编辑配置文件,切换到最后一行,增加: <VirtualHost 192.168.1.117:80>     ServerName web1.ams.com     DocumentRoot "/vhosts/web1/htdocs" </VirtualHost&g…

    Linux干货 2016-08-05
  • 马哥教育网络班第19期+第7周课程练习

    1、创建一个10G分区,并格式为ext4文件系统; (1) 要求其block大小为2048, 预留空间百分比为2, 卷标为MYDATA, 默认挂载属性包含acl; (2) 挂载至/data/mydata目录,要求挂载时禁止程序自动运行,且不更新文件的访问时间戳; 2、创建一个大小为1G的swap分区,并创建好文件系统,并启用之; 3、写一个脚本  …

    Linux干货 2016-08-08
  • 文本处理工具sed

    处理文本的工具sed Stream EDitor,  行编辑器     sed 是一种流编辑器,它一次处理一行内容。处理时,把     当前处理的行存储在临时缓冲区中,称为“模式空间”(     pa…

    Linux干货 2016-08-10
  • 15磁盘管理

    在系统中,常见的硬盘接口有分两类:并行的和串行的 并行: IDE: 133MB/s SCSI: 640MB/s 串行: SATA: 6Gbps SAS: 6Gbps USB: 480MB/s 存储设备的设备文件命名方式大致为:/dev/DEV_FILE IDE: /dev/hd#  #–>0,1,2,3 SCSI,SATA,SAS…

    Linux干货 2016-12-02