linux中shell编写数组排序,linux bash shell实现对数组快速排序(升序)
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实现对数组快速排序(升序)相关推荐
- linux运行powershell,linux – 是否可以编写一个在bash / shell和PowerShell中运行的脚本?...
我需要创建一个集成脚本来设置一些环境变量,使用wget下载文件并运行它. 挑战在于它需要是可以在Windows PowerShell和bash / shell上运行的SAME脚本. 这是shell脚本 ...
- 在linux中的sort命令,linux中sort命令
功能说明:将文本文件内容加以排序,sort可针对文本文件的内容,以行为单位来排序. 参 数: -b 忽略每行前面开始出的空格字符. -c 检查文件是否已经按照顺序排序. -d 排序时,处理英文字母.数 ...
- linux中用户组和用户,linux中用户和用户组
一.用户和组原理 一个用户可以属于多个组,一个组有多个用户 在Linux中操作系统必须依赖组和用户进行管理 二.与用户和组相关的配置文件 1.组相关配置文件 1)/etc/group :管理用户组信息 ...
- linux中make命令大全,Linux中的命令 make -f 是什么意思
二.Makefile的文件名 默认的情况下,make命令会在当前目录下按顺序找寻文件名为"GNUmakefile"."makef ile"."Make ...
- linux中original_如何在 Linux 中整理磁盘碎片
如何在 Linux 中整理磁盘碎片 转载自: 如何在 Linux 中整理磁盘碎片linux.cn 有一个神话是 linux 的磁盘从来不需要整理碎片.在大多数情况下这是真的,大多数因为是使用的是优秀 ...
- 网页修改linux命令行,linux中文本修改操作命令linux网页制作 -电脑资料
在命令模式下可以使用 vi 提供的各种有关命令对文本进行修改,包括对文本内容的删除.复制.取代和替换等, 1. 文本删除/移动 在编辑文本时 ,经常需要删除一些不需要的文本,我们可以用键将输错或不需要 ...
- linux中文件链接,关于Linux中文件,链接的一些思考
在Unix系统中,操作系统为磁盘上的文本与图像,鼠标键盘操作,网络交互等IO操作设计了一组通用API. 使他们被处理的时候可统一用字节流的方式.所以说,除了进程之外,其他的一切均可看做文件. Linu ...
- linux脚本怎么获取参数,在Bash shell脚本编程中,如何正确无误获取到“脚本选项参数”和“脚本参数”呢?...
Linnux 中有些命令的功能非常强大,主要是因为它支持的命令选项比较多.如:[ip]命令可以配置IP地址.路由条目的配置管理操作非常完善,该命令就可以完成[ifconfig]和[route]命令实现 ...
- linux shell 获取环境变量,bash shell中的环境变量
环境变量--bash shell使用环境变量来存储系统相关数据,并允许将数据存储在内存中. 环境变量分为:全局环境变量 本地环境变量 目录全局环境变量 本地环境变量 设置全局环境变量 删除环境变量 P ...
最新文章
- php复制mysql文件路径_与php 有关的问题 如何将上传的文件路径 保存到数据库中...
- Qt消息机制和事件、事件过滤
- mysql删除一条记录
- Invalid connection string format, a valid format is: host:port:sid
- shell中返回值是1为真还是假_shell脚本中判断上一个命令是否执行成功
- fiddler修改支付金额_不容忽视的记账工具:支付宝记账
- Android Fragment(二)
- VS 查看dll接口
- python 3.5 format_python 3.5学习笔记(第四章)
- 2014年12月份工作日学习计划
- 分享两本高质量算法书籍
- WinAPI: midiOutSetVolume - 设置 MIDI 输出设备的音量
- ukey证书是什么意思_什么是证书?
- pytorch例子学习——NEURAL TRANSFER USING PYTORCH神经迁移
- Android 环信 客服集成
- 使用pandas对excel表格筛选
- 软件构造 Lab-2 Report
- 团队作业6-展示博客
- 6-2 多项式求值(15 分) 本题要求实现一个函数,计算阶数为n,系数为a[0] ... a[n]的多项式f(x)=∑ ​i=0 ​n ​​ (a[i]×x ​i ​​ ) 在x点的值。
- jsp mysql超市管理系统,jsp668超市会员积分管理系统mysql