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

分享!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/430890.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python接口自动化测试框架实战从设计到开发_Python接口自动化测试框架实战 从设计到开发...

第1章 课程介绍(不要错过)本章主要讲解课程的详细安排、课程学习要求、课程面向用户等,让大家很直观的对课程有整体认知!第2章 接口测试工具Fiddler的运用本章重点讲解如何抓app\web的http\https请求包、如何模拟请求数据、过滤规则及修改响应数据、如何…

搭建 局域网

配件:网络交换机tp-link TL-SF1016D 16口(预备继续添加主机);vk-qf9700 USB网卡(10元一个);非屏蔽5类双绞线;机器都是win7的主机(三台分别是 8,9,10&#xff…

Linux 禁用msi模式,通过禁用MSI模式解决Win10磁盘占用100%的方法

许多win10系统用户会在电脑中安装ssd固态硬盘,而在使用过程中经常会出现卡顿的情况,检查之后发现磁盘占用率100%,这是怎么回事呢,那么其实我们可以通过禁用MSI模式来解决,接下来给大家讲解一下通过禁用MSI模式解决Win1…

oracle jdbc jar包_Oracle总结之plsql编程(基础七)

紧接基础六,对oracle角色和权限的管理之后,在接下来的几次总结中来就最近工作中用过的plsql编程方面的知识进行总结,和大家分享!一、plsql块1、只包括执行部分的plsql块打开输出选项:set serveroutput on;b…

Visual Studio调试之断点基础篇

原文链接地址:http://www.cnblogs.com/killmyday/archive/2009/09/26/1574311.html 我曾经问过很多人,你一般是怎么调试你的程序的? F9, F5, F11, F…… 有很多书和文章都是介绍怎么使用Visual Studio编写WinForm啦,、ASP.NET之类的程序&…

无线 在linux叫什么地方,请问有知道atheros无线网卡Linux驱动官方下载地址是什么吗?...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼楼上的没给出中文翻译,屮把它翻译下,以让中文用户读起来更友好些:1.Download board-2.bin and firmware-4.bin_WLAN.RM.2.0-00180-QCARMSWPZ-1下载---兵文件 board-2.bin 和 firmware-4.bin_WLAN…

python cv.imread_Python的OpenCV cv2.imread总是返回None而cvFeatDetector崩溃了python

我用python中的opencv弄湿了自己的脚,并且我认为开始加载图像是一个很好的开始。我在我的系统上构建了opencv,并且在目录tpl / opencv中有python绑定和opencv dll,这与我的项目相关。以下是一些演示问题的代码:from tpl.opencv im…

[译] ASP.NET 生命周期 – ASP.NET 请求生命周期(三)

使用特殊方法处理请求生命周期事件 为了在全局应用类中处理这些事件,我们会创建一个名称以 Application_ 开头,以事件名称结尾的方法,比如 Application_BeginRequest。举个例子,就像 Application_Start 和 Application_End 方法&a…

micropython lcd触摸屏显示中文_基于Micropython的天气显示 进程帖

本帖最后由 michael_llh 于 2019-4-17 10:06 编辑更下项目的进程哈!项目的思路很简单,就是从网上获取天气信息,然后进行显示!很尽量把过程写清楚,方便大家的交流和学习。首先说明下使用的硬件信息:Micropyt…

linux用while循环输出1到10,Linux Shell系列教程之(十一)Shell while循环 | Linux大学...

摘要在上一篇Linux Shell系列教程之(十)Shell for循环中,我们已经对Shell 循环语句的for循环进行了介绍,本篇给大家介绍下Shell 中另一种循环语句:Shell while循环。在上一篇Linux Shell系列教程之(十)Shell for循环中,我们已经对…

存储过程优缺点总结

优点: 1、快速 a、当对数据库进行复杂操作时(如对多个表进行 Update,Insert,Query,Delete 时),可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。这些操作,如果用程序来完成,就变成了一条条的 SQ…

c语言作业重庆科技学院,C语言程序设计学生上机报告-NO3.doc

C语言程序设计学生上机报告-NO3.doc重庆科技学院 上机实验报告(上机操作类) 课程名称 C 语 言 程 序 设 计 实验项目 循环结构程序设计(一) 机房名称 I313 上机时间 2017 年 11 月 19 日 指导老师 焦晓军 上机成绩 学生姓名 曾云 学号 2015441907 专业班级 机电 15-3 一、上机操…

sqlserver 触发器 update_运维日记| SQL server 那点事——DML触发器

各位新朋友~记得先点蓝字关注我哦~11月19日,21点,小编正六指霸屏,决赛圈1V4,忽然,电话响了,这种感觉很熟悉,不错,上次差点推掉对面水晶的那一幕又上演了……作…

linux fb应用例子,Linux下利用framebuffer画点的程序小例子

Linux下利用framebuffer画点的程序小例子:/** ** Filename: framebuffer.c** Description: linux下利用framebuffer画点的程序小例子** Version: 1.0* Created: 2011年02月25日 10时33分29秒* Revision: none* Compiler: …

pb利用datawindow查询符合条件的数据并且过滤掉其他数据_数据质量监测

1 Overview1.1 数据质量在数据部门里,数据质量问题经常是被动发现,所以数据质量的问题是大多数公司数据部门都不得不面对的问题。数据质量校验的目标是监控数据管道中,生产者、处理阶段以及消费者的数据的正确性、一致性和及时性的一项系统工…

PadLeft函数

string num12num.PadLeft(4, 0); //结果为为 0012 看字符串长度是否满足4位,不满足则在字符串左边以"0"补足 转载于:https://www.cnblogs.com/shy1766IT/p/5184937.html

将解决方案和项目放在同一目录中_借助卡第那思3D电子目录,巴鲁夫使用CAE数据扩展其产品目录...

巴鲁夫作为一家中型企业,1921年成立于毗邻斯图加特市的诺伊豪森,80年代初期直至后来很长的一段时间内,巴鲁夫是巴西第一家及唯一一家从事自主生产的传感器制造商。如今巴鲁夫不再仅仅位于诺伊豪森,而是遍布欧洲、亚洲、北美、南美…

c语言math函数 sgn,常用矩阵计算C语言代码

参考资料:行列式:http://zh.wikipedia.org/wiki/行列式#.E4.BB.A3.E6.95.B0.E4.BD.99.E5.AD.90.E5.BC.8F伴随矩阵:http://zh.wikipedia.org/wiki/伴随矩阵余因子矩阵:http://zh.wikipedia.org/wiki/余因子矩阵逆矩阵:h…

pip: The ultimate package manager for Python

安装Package pip install <package name>列出已安装的Package pip list查看已安装的Package的详细信息 pip show <package name>搜索PyPi上的Package pip search <keyword>卸载已安装的Package pip uninstall <package name>转载于:https://www.cnblog…

python调用mysql数据库sql语句过长有问题吗_python连接MYSQL数据库,调用update语句后无法更新数据,解决...

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"云数据库SQL Server&#xff0c;具有企业许可…