2011年12月19日,参考网上用C语言实现的快速排序,经过一番修改后,用shell(我的测试环境为centos5的bash-v3.x)实现了相同功能:对数组进行升序排序。

注:如果代码框里的代码复制出来后显示异常,就麻烦下载附件chris.zip(已将chris-qsort.sh和chris-algo.sh压缩打包为chris.zip)

1. shell函数形式(已将其放在附件里,文件名为:chris-qsort.sh。由于没法上传.sh脚本,故压缩打包了一下,文件名为:chris.zip):

Quick_Sort(){

#SortNumeric-arrayinASCorder, using normal Quick-Sort algorithm.

#C code: http://www.cnblogs.com/skyaspnet/archive/2010/11/03/1868298.html

#Usage: Quick_Sort lowest_index highest_index array_name

#e.g.,  Quick_Sort 0 9 array1

#e.g.,  Quick_Sort 1 3 array2

localarray=${3}

evallocalpivot=\$\{${array}[${1}]\}

locallow=${1}

localhigh=${2}

[ ${1} -ge ${2} ] &&return

while [ ${low} -lt ${high} ]; do

while [ ${low} -lt ${high} -a ${pivot} -le $(eval echo \$\{${array}[${high}]\}) ]; do

let high--

done

if [ ${pivot} -gt $(eval echo \$\{${array}[${high}]\}) ];then

eval ${array}[${low}]=\$\{${array}[${high}]\}

eval ${array}[${high}]=${pivot}

let low++

fi

while [ ${low} -lt ${high} -a ${pivot} -ge $(eval echo \$\{${array}[${low}]\}) ]; do

let low++

done

if [ ${pivot} -lt $(eval echo \$\{${array}[${low}]\}) ];then

eval ${array}[${high}]=\$\{${array}[${low}]\}

eval ${array}[${low}]=${pivot}

let high--

fi

done

#Executethe Quick_Sortfunctionrecursively

Quick_Sort ${1} $[${low}-1] ${array}

Quick_Sort $[${low}+1] ${2} ${array}

unset array pivot low high

}

2. shell脚本形式,进行简单测试(已将其放在附件里,文件名为chris-algo.sh。由于没法上传.sh脚本,故压缩打包了一下,文件名为:chris.zip)。

#!/bin/bash

##################################################

## Author     :  Chris

## CreateDate:  2011-12-19

## ModifyDate:  2012-05-14

## Realize common algorithms inbash-v3.x

## Note: Every functionrepresents an algorithm.

##################################################

#Normal Quick-Sort algorithm

Quick_Sort(){

#Sort Numeric-arrayinASCorder, using normal Quick-Sort algorithm.

#C code: http://www.cnblogs.com/skyaspnet/archive/2010/11/03/1868298.html

#Usage: Quick_Sort lowest_index highest_index array_name

#e.g.,  Quick_Sort 0 9 array1

#e.g.,  Quick_Sort 1 3 array2

localarray=${3}

eval localpivot=\$\{${array}[${1}]\}

locallow=${1}

localhigh=${2}

[ ${1} -ge ${2} ] && return

while [ ${low} -lt ${high} ]; do

while [ ${low} -lt ${high} -a ${pivot} -le $(eval echo \$\{${array}[${high}]\}) ]; do

let high--

done

if [ ${pivot} -gt $(eval echo \$\{${array}[${high}]\}) ]; then

eval ${array}[${low}]=\$\{${array}[${high}]\}

eval ${array}[${high}]=${pivot}

let low++

fi

while [ ${low} -lt ${high} -a ${pivot} -ge $(eval echo \$\{${array}[${low}]\}) ]; do

let low++

done

if [ ${pivot} -lt $(eval echo \$\{${array}[${low}]\}) ]; then

eval ${array}[${high}]=\$\{${array}[${low}]\}

eval ${array}[${low}]=${pivot}

let high--

fi

done

#Executethe Quick_Sortfunctionrecursively

Quick_Sort ${1} $[${low}-1] ${array}

Quick_Sort $[${low}+1] ${2} ${array}

unset array pivot low high

}

main(){

read-ep"Input Numeric: "numeric

size=$(echo ${numeric} | awk'{print NF}')

#Define array

t_array=(${numeric})

#Outputthe original array

for((i=0;i

printf "%d "${t_array[${i}]}

done

printf "\n"

#Using Quick_Sort functiontosort t_array

size_1=$[${size} - 1]

Quick_Sort 0 ${size_1} t_array

#Outputthe sorted array

for((i=0;i

printf "%d "${t_array[${i}]}

done

printf "\n"

}

main

输出如下:

[root@localhost algorithms]# ./chris-algo.sh

49 38 65 97 76 13 27 9 2 1

1 2 9 13 27 38 49 65 76 97

分享!

linux中shell编写数组排序,linux bash shell实现对数组快速排序(升序)相关推荐

  1. linux运行powershell,linux – 是否可以编写一个在bash / shell和PowerShell中运行的脚本?...

    我需要创建一个集成脚本来设置一些环境变量,使用wget下载文件并运行它. 挑战在于它需要是可以在Windows PowerShell和bash / shell上运行的SAME脚本. 这是shell脚本 ...

  2. 在linux中的sort命令,linux中sort命令

    功能说明:将文本文件内容加以排序,sort可针对文本文件的内容,以行为单位来排序. 参 数: -b 忽略每行前面开始出的空格字符. -c 检查文件是否已经按照顺序排序. -d 排序时,处理英文字母.数 ...

  3. linux中用户组和用户,linux中用户和用户组

    一.用户和组原理 一个用户可以属于多个组,一个组有多个用户 在Linux中操作系统必须依赖组和用户进行管理 二.与用户和组相关的配置文件 1.组相关配置文件 1)/etc/group :管理用户组信息 ...

  4. linux中make命令大全,Linux中的命令 make -f 是什么意思

    二.Makefile的文件名 默认的情况下,make命令会在当前目录下按顺序找寻文件名为"GNUmakefile"."makef ile"."Make ...

  5. linux中original_如何在 Linux 中整理磁盘碎片

    如何在 Linux 中整理磁盘碎片 转载自: 如何在 Linux 中整理磁盘碎片​linux.cn 有一个神话是 linux 的磁盘从来不需要整理碎片.在大多数情况下这是真的,大多数因为是使用的是优秀 ...

  6. 网页修改linux命令行,linux中文本修改操作命令linux网页制作 -电脑资料

    在命令模式下可以使用 vi 提供的各种有关命令对文本进行修改,包括对文本内容的删除.复制.取代和替换等, 1. 文本删除/移动 在编辑文本时 ,经常需要删除一些不需要的文本,我们可以用键将输错或不需要 ...

  7. linux中文件链接,关于Linux中文件,链接的一些思考

    在Unix系统中,操作系统为磁盘上的文本与图像,鼠标键盘操作,网络交互等IO操作设计了一组通用API. 使他们被处理的时候可统一用字节流的方式.所以说,除了进程之外,其他的一切均可看做文件. Linu ...

  8. linux脚本怎么获取参数,在Bash shell脚本编程中,如何正确无误获取到“脚本选项参数”和“脚本参数”呢?...

    Linnux 中有些命令的功能非常强大,主要是因为它支持的命令选项比较多.如:[ip]命令可以配置IP地址.路由条目的配置管理操作非常完善,该命令就可以完成[ifconfig]和[route]命令实现 ...

  9. linux shell 获取环境变量,bash shell中的环境变量

    环境变量--bash shell使用环境变量来存储系统相关数据,并允许将数据存储在内存中. 环境变量分为:全局环境变量 本地环境变量 目录全局环境变量 本地环境变量 设置全局环境变量 删除环境变量 P ...

最新文章

  1. php复制mysql文件路径_与php 有关的问题 如何将上传的文件路径 保存到数据库中...
  2. Qt消息机制和事件、事件过滤
  3. mysql删除一条记录
  4. Invalid connection string format, a valid format is: host:port:sid
  5. shell中返回值是1为真还是假_shell脚本中判断上一个命令是否执行成功
  6. fiddler修改支付金额_不容忽视的记账工具:支付宝记账
  7. Android Fragment(二)
  8. VS 查看dll接口
  9. python 3.5 format_python 3.5学习笔记(第四章)
  10. 2014年12月份工作日学习计划
  11. 分享两本高质量算法书籍
  12. WinAPI: midiOutSetVolume - 设置 MIDI 输出设备的音量
  13. ukey证书是什么意思_什么是证书?
  14. pytorch例子学习——NEURAL TRANSFER USING PYTORCH神经迁移
  15. Android 环信 客服集成
  16. 使用pandas对excel表格筛选
  17. 软件构造 Lab-2 Report
  18. 团队作业6-展示博客
  19. 6-2 多项式求值(15 分) 本题要求实现一个函数,计算阶数为n,系数为a[0] ... a[n]的多项式f(x)=∑ ​i=0 ​n ​​ (a[i]×x ​i ​​ ) 在x点的值。
  20. jsp mysql超市管理系统,jsp668超市会员积分管理系统mysql

热门文章

  1. 1、vue 笔记之 组件
  2. cesium进行模型高度测量的代码片段
  3. vb 获取汉字拼音的首字母
  4. x3-02 java_Day13 -- Java流程控制02
  5. pads导出坐标文件html,【教程】PADS如何导出SMT贴片机用的坐标文件
  6. 动态sql (sql-if,sql-foreach)
  7. 五、分治法应用--矩阵乘法
  8. UDP发字节,接收字节
  9. 文档服务器设置密码,文档服务器设置密码
  10. 关于linux系统中无法识别某一命令问题的解决方案