#!/bin/bash
#
# description : four sorting algorithms in bash shell
# author : Junjie Huang, acmhjj@gmail.com
# license : GPL
# create : 2016 JAN 20
# modifty : 2016 JAN 21
#
arr=(5 2 7 4 8 0 6 3 1 9)
#冒泡排序
function bubble_sort(){
for ((i = 0; i < 9; i++)); do
for ((j = i + 1; j < 10; j++)); do
if [ ${arr[i]} -gt ${arr[j]} ]; then
tmp=${arr[i]}
arr[i]=${arr[j]}
arr[j]=${tmp}
fi
done
done
}
#选择排序
function selection_sort(){
for ((i=0;i<9;i++)); do
min_pos=${i}
min_value=${arr[i]}
for ((j=i+1;j<10;j++)); do
if [ ${arr[min_pos]} -gt ${arr[j]} ]; then
min_pos=${j}
min_value=${arr[j]}
fi
done
if [ ${min_pos} -ne ${i} ]; then
tmp=${arr[i]}
arr[i]=${min_value}
arr[min_pos]=${tmp}
fi
done
}
#插入排序
function insertion_sort(){
for ((i=1; i<10; i++)); do
if [ ${arr[i]} -lt ${arr[i-1]} ]; then
temp=${arr[i]}
for ((j=i-1; j>=0 && arr[j]>temp; j--)); do
arr[j+1]=${arr[j]}
done
arr[j+1]=${temp}
fi
done
}
#快速排序
function quick_sort(){
local i=$1
local j=$2
if [ $1 -gt $2 ]; then
return
fi
while [ ${i} -ne ${j} ]; do
while [ ${arr[j]} -ge ${arr[$1]} ] && [ ${i} -lt ${j} ]; do
j=$[$j - 1]
done
while [ ${arr[i]} -le ${arr[$1]} ] && [ ${i} -lt ${j} ]; do
i=$[$i + 1]
done
if [ ${i} -lt ${j} ]; then
temp=${arr[i]}
arr[i]=${arr[j]}
arr[j]=${temp}
fi
done
temp=${arr[i]}
arr[i]=${arr[$1]}
arr[$1]=${temp}
quick_sort $1 $[$i - 1]
quick_sort $[$1 + 1] $2
}
quick_sort 0 9
for ((i=0; i<10; i++)); do
echo ${arr[i]}
done