一个无聊男人的疯狂《数据结构与算法分析-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面, 一随机数组的三种生成算法
由于偷懒我最近老是喜欢用bash从C语言(其实好像是csh)中引进的语法,所以感觉都不是那么纯粹的bash风格(但是其实bash的风格我本来就不 喜欢),老是学了不用,有一天写bash都当C语言在写就完了。今天加班比较晚,就不搞什么新内容了,将2.8的bash实现翻译成了比较纯粹的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日