1  #!/bin/bash  
  2
  3
  4     if [ $COMMENT_BLOCK ]; then
  5        Bash Shell script implementation
  6        of Heapsort.
  7        GNU bash, version 2.05b.
  8        Author: John Bryan, Jr.
  9        Date: September 10, 2006
 10        Opens file, integers.txt, containing
 11        variable number of integers.
 12        Output is to screen.  Redirection operator
 13        can be used on command line to output to file.
 14
 15     fi
 16
 17
 18     GetIntegers ()
 19     {
 20         INTFILE=$(find . -name "integers.txt")
 21         exec 6<$INTFILE
 22         while read -u 6 dta
 23         do
 24            echo "$dta"
 25         done
 26         exec 6<&-
 27     }
 28
 29
 30     Swap ()
 31     {
 32        p2S_a=( `echo $1` )
 33        p2S_i_i=( `echo $2` )
 34        p2S_j_i=( `echo $3` )
 35        temp_i="${p2S_a[$p2S_i_i]}"
 36        p2S_a[$p2S_i_i]="${p2S_a[$p2S_j_i]}"
 37        p2S_a[$p2S_j_i]="$temp_i"
 38        echo "${p2S_a[@]}"
 39     }
 40
 41
 42     ConstructHeap()
 43     {
 44        p2CH_a=$1
 45        p2CH_N_i=$2
 46        printf "\n"
 47        let X=$p2CH_N_i-1;
 48        printf "\n"
 49        while [ "$X" -ge 0 ]
 50        do
 51           let X=X-1
 52           arg21=`echo ${p2CH_a[@]}`
 53           arg22=`echo $X+1`
 54           arg23=`echo "$p2CH_N_i"`
 55           p2CH_a=( `Bubbledown "$arg21" "$arg22" "$arg23"` )
 56        done
 57          echo "${p2CH_a[@]}"
 58     }
 59
 60
 61     Bubbledown()
 62     {
 63        declare -i i
 64        declare -i j
 65        declare -i k
 66        declare -i w
 67        declare -i x
 68        declare -i y
 69        declare -i c1
 70        declare -i u
 71        declare -i N2
 72        P2BD_a=( `echo $1` )
 73        X=( `echo $2` )
 74        N2=( `echo $3` )
 75        j=$2
 76        while [ 0 -eq 0 ]
 77        do
 78            k="$j"
 79            u=0
 80            x=0
 81            let w=2*k+1
 82            if [ "$w" -lt "$N2" ]
 83            then
 84               x="${P2BD_a["$w"]}"
 85            fi
 86            y="${P2BD_a["$j"]}"
 87            let c1=2*k+2
 88            if [ "$c1" -lt "$N2" ]
 89            then
 90               u="${P2BD_a["$c1"]}"
 91            fi
 92            if [ "$w" -lt "$N2" ]
 93            then
 94               if [ "$x" -gt "$y" ]
 95               then
 96                  let j=2*k+1
 97               fi
 98            fi
 99            y="${P2BD_a["$j"]}"
100            if [ "$c1" -lt "$N2" ]
101            then
102               if  [ "$u" -gt "$y" ]
103               then
104                  let j=2*k+2
105                fi
106            fi
107            BD2S_arg1_a=`echo ${P2BD_a[@]}`
108            BD2S_arg2_i=`echo $k`
109            BD2S_arg3_i=`echo $j`
110            P2BD_a=( `Swap "$BD2S_arg1_a" "$BD2S_arg2_i" "$BD2S_arg3_i"` )
111            if [ "$BD2S_arg2_i" -eq "$BD2S_arg3_i" ]
112            then
113               break
114            fi
115        done
116        echo "${P2BD_a[@]}"
117     }
118
119
120     Heapsort()
121     {
122        p2HS_a=( `echo "$1"` )
123        p2HS_N_i=( `echo "$2"` )
124        let count=$p2HS_N_i-1
125        while [ "$count" -gt 0 ]
126        do
127           let index=count
128           let count=count-1
129           rr1=`echo ${p2HS_a[@]}`
130           rr2=`echo $index`
131           rr3=0
132           p2HS_a=( `Swap "$rr1" "$rr2" "$rr3"` )
133           br1=`echo ${p2HS_a[@]}`
134           br2=0
135           br3=`echo $index`
136           p2HS_a=( `Bubbledown "$br1" "$br2" "$br3"` )
137        done
138        echo "${p2HS_a[@]}"
139     }
140
141
142     PrintArray()
143     {
144        declare -i number_of_elements
145        array_to_print=( `echo "$1"` )
146        printf "\n"
147        count=0
148        while [ $count -lt $2 ]
149        do
150            printf "SortedArray[%d] = %d \n" $count ${array_to_print[$count]}
151            let count=count+1
152        done
153        return 0;
154     }
155
156
157     Algorithm()
158     {
159        IntArray=( `GetIntegers` )
160        argument=`echo ${IntArray[@]}`
161        N=`echo ${#IntArray[@]}`
162        HeapArray=( `ConstructHeap "$argument" "$N"` )
163        aa1=`echo ${HeapArray[@]}`
164        M=`echo ${#HeapArray[@]}`
165        sorted_array=( `Heapsort "$aa1" "$M"` )
166        aa1=`echo ${sorted_array[@]}`
167        PrintArray "$aa1" "$M"
168     }
169
170
171   Algorithm
172   exit 0