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

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循环中,定义了比较次数

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值