九天雁翎的博客
如果你想在软件业获得成功,就使用你知道的最强大的语言,用它解决你知道的最难的问题,并且等待竞争对手的经理做出自甘平庸的选择。 -- Paul Graham

一个无聊男人的疯狂《数据结构与算法分析-C++描述》学习笔记 习题2.8 随机数组的三种生成算法(补) 将bash的实现翻译成比较纯正的bash风格


  一个无聊男人的疯狂《数据结构与算法分析-C++描述》学习笔记
7)习题2.8 随机数组的三种生成算法补 将bash的实现翻译成比较纯正的bash风格

write by 九天雁翎(JTianLing) --
blog.csdn.net/vagrxie

 

<<Data Structures and Algorithm Analysis in C++>>

--《数据结构与算法分析c++描述》 Mark Allen Weiss 人民邮电大学出版 中文版第49面, 一随机数组的三种生成算法

由于偷懒我最近老是喜欢用bashC语言(其实好像是csh)中引进的语法,所以感觉都不是那么纯粹的bash风格(但是其实bash的风格我本来就不 喜欢),老是学了不用,有一天写bash都当C语言在写就完了。今天加班比较晚,就不搞什么新内容了,将2.8bash实现翻译成了比较纯粹的bash 风格。。。。对于没有接触过Bash的人来说更加接近天书了,enjoy it......(I hope you can)

 1 #!/usr/bin/env bash
 2
 3 # just for
a range rand....let me die....

 
4 # what I had said? bash is not a
good

 5 # language
for describing algorithms

 6 randInt()
 7 {
 8     local a=$1
 9     local b=$2
10
11     if [ "$a" -gt "$b" ]
12     then
13         local temp=$a
14         a=$b
15         b=$temp
16     fi
17
18     local mi=$(($b-$a+1))
19     local r=$((RANDOM%${mi}+${a}))
20     echo -n $r
21 }
22
23 randArr1()
24 {
25 # only one
argument because I hate the

26 # bash's
indirect reference

27 # you can
reference the (4) binarySearch to

28 # see what I
said

29     local n=$1
30     for i in `seq $n`
31     do
32         while true
33         do
34             temp=`randInt 1 $n`
35             j=1
36             while [ "$j" -lt "$i" ]
37             do
38                 if [ ${a[j]} -eq "$temp" ]
39                 then
40                     break
41                 fi
42                 j=$(($j+1))
43             done
44             if [ "$j" -eq "$i" ]
45             then
46                 a[j]=$temp
47                 break
48             fi
49         done
50     done
51
52     echo ${a[*]}
53 }
54
55 randArr2()
56 {
57     local n=$1
58     # used for bool array
59     for i in `seq $n`
60     do
61         while true
62         do
63             local temp=`randInt 1 $n`
64             if [ -z ${b[temp]} ]
65             then
66                 a[i]=$temp
67                 b[temp]=true
68                 break
69             fi
70         done
71     done
72
73     echo ${a[*]}
74 }
75
76 randArr3()
77 {
78     local n=$1
79     for i in `seq $n`
80     do
81         a[i]=$i
82     done
83     for i in `seq $n`
84     do
85         local temp=`randInt 1 $n`
86         t=${a[i]}
87         a[i]=${a[temp]}
88         a[temp]=$t
89     done
90
91     echo ${a[*]}
92 }
93
94 # so slow that I
can't bear it run 100 times

95 randArr1 10
96 randArr2 10
97 randArr3 10
98

 

 

write by 九天雁翎(JTianLing) -- www.jtianling.com

 

分类:  算法 
标签:  Bash  《数据结构与算法分析-C++描述》 

Posted By 九天雁翎 at 九天雁翎的博客 on 2008年12月04日

前一篇: 一个无聊男人的疯狂《数据结构与算法分析-C++描述》学习笔记 用C++/lua/python/bash的四重实现(6)高效率的幂运算 后一篇: 一个无聊男人的疯狂《数据结构与算法分析-C++描述》学习笔记 用C++/lua/python/bash的四重实现(7)习题2.8 随机数组的三种生成算法