归并排序shell脚本
时间: 2023-11-17 08:02:56 浏览: 34
归并排序是一种高效的排序算法,它的基本思想是将待排序的序列分成若干个子序列,每个子序列都是有序的,然后再将有序的子序列合并成整体有序的序列。下面是一个归并排序的shell脚本实现:
```shell
#!/bin/bash
# 定义归并排序函数
merge_sort() {
local arr=("$@")
local len=${#arr[@]}
if [[ $len -le 1 ]]; then
echo "${arr[@]}"
return
fi
local mid=$((len / 2))
local left=($(merge_sort "${arr[@]:0:$mid}"))
local right=($(merge_sort "${arr[@]:$mid}"))
local i=0 j=0 k=0
while [[ $i -lt ${#left[@]} && $j -lt ${#right[@]} ]]; do
if [[ ${left[$i]} -lt ${right[$j]} ]]; then
arr[$k]=${left[$i]}
i=$((i + 1))
else
arr[$k]=${right[$j]}
j=$((j + 1))
fi
k=$((k + 1))
done
while [[ $i -lt ${#left[@]} ]]; do
arr[$k]=${left[$i]}
i=$((i + 1))
k=$((k + 1))
done
while [[ $j -lt ${#right[@]} ]]; do
arr[$k]=${right[$j]}
j=$((j + 1))
k=$((k + 1))
done
echo "${arr[@]}"
}
# 测试归并排序函数
arr=(5 3 8 6 4)
echo "排序前:${arr[@]}"
sorted_arr=($(merge_sort "${arr[@]}"))
echo "排序后:${sorted_arr[@]}"
```
上述脚本定义了一个`merge_sort`函数,该函数接受一个数组作为参数,返回排序后的数组。在函数内部,首先判断数组长度是否小于等于1,如果是,则直接返回该数组;否则,将数组分成左右两个子数组,分别递归调用`merge_sort`函数,然后将左右两个有序子数组合并成一个有序数组。最后,测试了一下该函数的使用,将一个无序数组排序后输出。