#!/bin/bash 

function  newGap 
{
    typeset -i newgap
    newgap=($1*10)
    newgap=$newgap/13
    if [[ $newgap -eq 9 || $newgap -eq 10 ]]
    then
	newgap=11
    elif [[ $newgap -lt 1 ]]
    then 
	newgap=1
    fi
    return $newgap
}

function swap 
{
    temp=${a[$1]}
    a[$1]=${a[$2]}
    a[$2]=$temp
}

declare -a a=(1 6 5 7 8 9 3 2 4 0)

echo "Original values are ${a[@]} "

let aSize=${#a[@]}
let gap=$aSize

while(true)
do    
    newGap $gap
    gap=$?
    let swapped=0
    let i=0
    let diff=$aSize-$gap
    while(true)
    do
	if [[ $i -ge $diff ]]
	then
	    break
	fi
	let j=$i+$gap
	if [[ ${a[$i]} -gt ${a[$j]} ]]
	then
	    swap $i $j
	    let swapped=1
	fi
	let i=i+1
    done
    echo "gap=$gap"
    if [[ $gap -eq 1 && $swapped -eq 0 ]] 
    then
	break 2
    fi

done
echo "New      values are ${a[@]} "
