File tree Expand file tree Collapse file tree 2 files changed +42
-18
lines changed Expand file tree Collapse file tree 2 files changed +42
-18
lines changed Original file line number Diff line number Diff line change 8
8
sort_list () {
9
9
(( $# != 2 )) && return 1
10
10
typeset -i left=$1
11
- (( left < 0 )) || (( 0 == ${# list[@]} )) && return 2
11
+ (( left < 0 )) || (( 0 == ${# list[@]} )) && return 2
12
12
typeset -i right=$2
13
13
(( right >= ${# list[@]} )) && return 3
14
- typeset -i i=$left ; typeset -i j=$right
15
- typeset -i mid; (( mid= (left+ right) / 2 ))
16
- typeset partition_item; partition_item=" ${list[$mid]} "
14
+ typeset -i i=$left
15
+ typeset -i j=$right
16
+ typeset -i mid
17
+ (( mid = (left + right) / 2 ))
18
+ typeset partition_item
19
+ partition_item=" ${list[$mid]} "
17
20
typeset temp
18
- while (( j > i)) ; do
19
- item=${list[i]}
20
- while [[ " ${list[$i]} " < " $partition_item " ]] ; do
21
- (( i++ ))
22
- done
23
- while [[ " ${list[$j]} " > " $partition_item " ]] ; do
24
- (( j-- ))
25
- done
26
- if (( i <= j)) ; then
27
- temp=" ${list[$i]} " ; list[$i ]=" ${list[$j]} " ; list[$j ]=" $temp "
28
- (( i++ ))
29
- (( j-- ))
30
- fi
21
+ while (( j > i)) ; do
22
+ item=${list[i]}
23
+ while [[ " ${list[$i]} " < " $partition_item " ]]; do
24
+ (( i++ ))
25
+ done
26
+ while [[ " ${list[$j]} " > " $partition_item " ]]; do
27
+ (( j-- ))
28
+ done
29
+ if (( i <= j)) ; then
30
+ temp=" ${list[$i]} "
31
+ list[$i ]=" ${list[$j]} "
32
+ list[$j ]=" $temp "
33
+ (( i++ ))
34
+ (( j-- ))
35
+ fi
31
36
done
32
- (( left < j)) && sort_list $left $j
37
+ (( left < j)) && sort_list $left $j
33
38
(( right > i)) && sort_list $i $right
34
39
return 0
35
40
}
36
41
42
+ # Sorts the array variable passed as 1st parameter from index $2 to index $3.
43
+ sort_list_named () {
44
+ (( $# != 3 )) && return 1
45
+ typeset -n list=" $1 "
46
+ sort_list " $2 " " $3 "
47
+ }
48
+
37
49
if [[ $0 == * sorting.sh ]] ; then
38
50
[[ -n $ZSH_VERSION ]] && setopt ksharrays
39
51
typeset -a list
Original file line number Diff line number Diff line change @@ -45,6 +45,18 @@ test_sort()
45
45
assertNotEquals " 0" " $? "
46
46
}
47
47
48
+ test_sort_named () {
49
+ local LC_ALL=C # for predictable sort order
50
+ typeset -a my_expected=(1 2 3 A B X b y z)
51
+
52
+ typeset -a my_data=(z b y 2 3 1 X A B)
53
+ sort_list_named my_data 0 ${# my_data[@]} -1
54
+ assertEquals " sort_list_named must complete successfully" 0 $?
55
+
56
+ for (( i= 0 ; i < ${# my_expected[@]} ; i++ )) ; do
57
+ assertEquals " Expected sorted data at index $i ." " ${my_expected[i]} " " ${my_data[i]} "
58
+ done
59
+ }
48
60
49
61
if [ ' @abs_top_srcdir@' = ' ' ] ; then
50
62
echo " Something is wrong abs_top_srcdir is not set."
You can’t perform that action at this time.
0 commit comments