【问题标题】:Bubble sort in Linux/Unix shell scriptingLinux/Unix shell 脚本中的冒泡排序
【发布时间】:2013-01-24 17:54:43
【问题描述】:

我正在尝试执行冒泡排序是 Unix shell 脚本。为什么我的代码不起作用?

a=(10 8 20 25 12)

for ((i=0;i<5;i++))
do
 for((j=0;j<5;j++))
 do
if ((${a[j]} > ${a[$((j+1))]}))
then
  v=${a[$j]}
  a[$j]=${a[$((j+1))]}
  a[$((j+1))]=$v
    fi
 done
done
    echo ${a[*]}
    echo "end..."

【问题讨论】:

  • 你知道有一个sort 命令吗?
  • @WaleedKhan 排序使用合并排序。这比气泡( O(nlgn)
  • “据我所知,bubble 是最慢的” 那么lucksort 呢?
  • 那么sleep sort呢?
  • 从某种意义上说,sleep排序非常快;使用无限分辨率的时钟,通过规范化键以适应固定间隔,它是 O(n)。

标签: linux shell unix sorting bubble-sort


【解决方案1】:

我想这是家庭作业。因此我不给出代码,只是指出代码中的错误:

for((j=0;j&lt;5;j++)) 然后读取a[j+1],这里会出现问题,因为当j=4j+1 不存在时

解决这个问题,您的程序将排序。

【讨论】:

  • 谢谢 .. 循环应该是 for((j=0;j
【解决方案2】:

试试这个:

echo "Enter size of array";
read  n; #get the size of array from user.
echo "Enter the array";
read -a arr;  #get the array form user eg: 2 3 4 5 6
echo "Orignal array is: ${arr[*]}"; #print orignal array

flag=1;
for (( i = 0; i < $n-1; i++ ))
do
    flag=0;
    for ((j = 0; j < $n-1-$i; j++ ))
    do
        if [[ ${arr[$j]} -gt ${arr[$j+1]} ]]
        then
            temp=${arr[$j]};
            arr[$j]=${arr[$j+1]};
            arr[$j+1]=$temp;
            flag=1;
        fi
    done

    if [[ $flag -eq 0 ]]; then
        break;
    fi
      
done
echo "Final sorted Array is ${arr[*]}";

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 2013-10-09
    • 2017-03-11
    • 1970-01-01
    • 2015-09-12
    • 2014-02-25
    相关资源
    最近更新 更多