#!/bin/bash
declare -a a
declare -f sort_func
a=(8 4 9 7 1 11 6 2)
len=${#a[@]}
for((i=0;i<$len;i++));do
temp[i]=0
done
function merge(){
local arr=($1)
local i=$2
local left=$2
local mid=$3
local t=$[$mid+1]
local right=$4
local k=0
while [ $i -le $mid -a $t -le $right ]
do
if [ ${arr[$i]} -lt ${arr[$t]} ];then
temp[((k++))]=${arr[((i++))]}
else
temp[((k++))]=${arr[((t++))]}
fi
done
while [ $i -le $mid ]
do
temp[((k++))]=${arr[((i++))]}
done
while [ $t -le $right ]
do
temp[((k++))]=${arr[((t++))]}
done
local p=0
while [ $left -le $right ]
do
arr[((left++))]=${temp[((p++))]}
done
echo ${arr[*]}
}
function sort_func(){
arr=($1)
local left=$2
local right=$3
if [ $left -lt $right ];then
local mid=$[$[$left+$right]/2]
sort_func "${arr[*]}" $left $mid
sort_func "${arr[*]}" $(($mid+1)) $right
arr=($(merge "${arr[*]}" $left $mid $right))
fi
}
sort_func "${a[*]}" 0 7
echo "------------"
echo ${arr[@]}
在每次执行排序函数(merge)时,使用的temp数组的长度为(right-left+1)