【shell脚本编程】-4 shell脚本编写冒泡排序
文章目录
- 1、脚本要求
- 2、脚本编写
- 3、脚本解释
- 4、算法思路
1、脚本要求
使用shell语言编写一个冒泡排序的脚本
2、脚本编写
#!/bin/bashif [ $# -eq 0 ]; thenecho "请提供需要排序的数字作为参数"echo "用法: $0 数字1 数字2 ... 数字n"exit 1
fiarr=("$@")n=${#arr[@]}for ((i = 0; i < n; i++)); dofor ((j = 0; j < n - i - 1; j++)); doif [ ${arr[j]} -gt ${arr[j+1]} ]; thentemp=${arr[j]}arr[j]=${arr[j+1]}arr[j+1]=$tempfidone
doneecho "排序前: $*"
echo "排序后: ${arr[@]}"
3、脚本解释
#!/bin/bash# 检查是否提供了待排序的数字
if [ $# -eq 0 ]; thenecho "请提供需要排序的数字作为参数"echo "用法: $0 数字1 数字2 ... 数字n"exit 1
fi# 将命令行参数保存到数组中
arr=("$@")# 获取数组长度
n=${#arr[@]}# 冒泡排序核心算法
for ((i = 0; i < n; i++)); do# 每轮排序后最大的元素会"浮"到末尾,所以下一轮可以少比较一次for ((j = 0; j < n - i - 1; j++)); do# 比较相邻的两个元素if [ ${arr[j]} -gt ${arr[j+1]} ]; then# 交换元素temp=${arr[j]}arr[j]=${arr[j+1]}arr[j+1]=$tempfidone
done# 输出排序结果
echo "排序前: $*"
echo "排序后: ${arr[@]}"
4、算法思路
-
相邻两个元素比大小,小的元素左移位置,大的元素右移,(重要)
-
先定义数组长度,写for循环,for循环中外层循环定义了冒泡排序比较的轮次数,内层for循环中,定义了比较次数
-
中间,数组的相邻元素值的比较,是定义一个变量名,将右侧元素值取出来。然后将左边的元素值覆盖右边,再将定义的变量值,赋值给第一个元素,完成数组元素值的位置交换交换 最后输出排序后的数组所有元素