云计算百科
云计算领域专业知识百科平台

【shell脚本编程】-4 shell脚本编写冒泡排序

文章目录

    • 1、脚本要求
    • 2、脚本编写
    • 3、脚本解释
    • 4、算法思路

1、脚本要求

使用shell语言编写一个冒泡排序的脚本

2、脚本编写

#!/bin/bash

if [ $# -eq 0 ]; then
echo "请提供需要排序的数字作为参数"
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]=$temp
fi
done
done

echo "排序前: $*"
echo "排序后: ${arr[@]}"

3、脚本解释

#!/bin/bash

# 检查是否提供了待排序的数字
if [ $# -eq 0 ]; then
echo "请提供需要排序的数字作为参数"
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]=$temp
fi
done
done

# 输出排序结果
echo "排序前: $*"
echo "排序后: ${arr[@]}"

4、算法思路

  • 相邻两个元素比大小,小的元素左移位置,大的元素右移,(重要)

  • 先定义数组长度,写for循环,for循环中外层循环定义了冒泡排序比较的轮次数,内层for循环中,定义了比较次数

  • 中间,数组的相邻元素值的比较,是定义一个变量名,将右侧元素值取出来。然后将左边的元素值覆盖右边,再将定义的变量值,赋值给第一个元素,完成数组元素值的位置交换交换 最后输出排序后的数组所有元素

赞(0)
未经允许不得转载:网硕互联帮助中心 » 【shell脚本编程】-4 shell脚本编写冒泡排序
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!