aydarbiktimirov

visual-sort

Jun 2nd, 2011
208
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 2.64 KB | None | 0 0
  1. #!/bin/bash
  2.  
  3. ARR=()
  4.  
  5. function read_array()
  6. {
  7.     for i in $(seq 1 $#)
  8.     do
  9.         ARR[$i]=$1
  10.         shift
  11.     done
  12. }
  13.  
  14. function print_array()
  15. {
  16.     interval=$1
  17.     shift
  18.     __k=$1
  19.     shift
  20.     __l=$1
  21.     shift
  22.     echo -en '\r'
  23.     for __i in $(seq 1 $1)
  24.     do
  25.         if [ "$__i" -eq "$__k" ]
  26.         then
  27.             echo -en '\033[1;33m'
  28.         fi
  29.         if [ "$__i" -eq "$__l" ]
  30.         then
  31.             echo -en '\033[1;31m'
  32.         fi
  33.         echo -n "${ARR[$__i]} "
  34.         if [ "$__i" -eq "$__k" -o "$__i" -eq "$__l" ]
  35.         then
  36.             echo -en '\033[0m'
  37.         fi
  38.     done
  39.     sleep $interval
  40. }
  41.  
  42. function swap()
  43. {
  44.     TMP=${ARR[$1]}
  45.     ARR[$1]=${ARR[$2]}
  46.     ARR[$2]=$TMP
  47. }
  48.  
  49. function bubble_sort()
  50. {
  51.     for i in $(seq 1 $#)
  52.     do
  53.         for j in $(seq $# -1 $(($i + 1)))
  54.         do
  55.             print_array 1 $(($j - 1)) $j $#
  56.             if [ "${ARR[$(($j - 1))]}" -gt "${ARR[$j]}" ]
  57.             then
  58.                 swap $((j - 1)) $j
  59.                 print_array 1 $j $(($j - 1)) $#
  60.             fi
  61.         done
  62.     done
  63. }
  64.  
  65. function insertion_sort()
  66. {
  67.     for i in $(seq 2 $#)
  68.     do
  69.         for j in $(seq $i -1 2)
  70.         do
  71.             print_array 1 $(($j - 1)) $j $#
  72.             if [ "${ARR[$(($j - 1))]}" -le "${ARR[$j]}" ]
  73.             then
  74.                 break
  75.             fi
  76.             swap $j $(($j - 1))
  77.             print_array 1 $j $(($j - 1)) $#
  78.         done
  79.     done
  80. }
  81.  
  82. function selection_sort()
  83. {
  84.     for p in $(seq 1 $#)
  85.     do
  86.         m=$p
  87.         for i in $(seq $(($p + 1)) $#)
  88.         do
  89.             print_array 1 $m $i $#
  90.             if [ "${ARR[$m]}" -gt "${ARR[$i]}" ]
  91.             then
  92.                 m=$i
  93.             fi
  94.         done
  95.         if [ "$m" -ne "$p" ]
  96.         then
  97.             swap $m $p
  98.             print_array 1 $p 0 $#
  99.         fi
  100.     done
  101. }
  102.  
  103. function shell_sort()
  104. {
  105.     d=$#
  106.     while [ "$d" -gt "1" ]
  107.     do
  108.         d=$(($d / 2))
  109.         flag=0
  110.         while [ "$flag" -eq "0" ]
  111.         do
  112.             flag=1
  113.             for j in $(seq 1 $(($# - $d)))
  114.             do
  115.                 i=$(($j + $d))
  116.                 print_array 1 $i $j $#
  117.                 if [ "${ARR[$j]}" -gt "${ARR[$i]}" ]
  118.                 then
  119.                     swap $j $i
  120.                     print_array 1 $j $i $#
  121.                     flag=0
  122.                 fi
  123.             done
  124.         done
  125.     done
  126. }
  127.  
  128. function gnome_sort()
  129. {
  130.     i=2
  131.     while [ "$i" -le "$#" ]
  132.     do
  133.         print_array 1 $(($i - 1)) $i $#
  134.         if [ "${ARR[$(($i - 1))]}" -le "${ARR[$i]}" ]
  135.         then
  136.             i=$(($i + 1))
  137.         else
  138.             swap $(($i - 1)) $i
  139.             print_array 1 $i $(($i - 1)) $#
  140.             if [ "$i" -gt "2" ]
  141.             then
  142.                 i=$(($i - 1))
  143.             else
  144.                 i=$(($i + 1))
  145.             fi
  146.         fi
  147.     done
  148. }
  149.  
  150. function main()
  151. {
  152.     SORT=$1
  153.     shift
  154.     read_array $@
  155.     case $SORT in
  156.         bubble)
  157.             bubble_sort $@;;
  158.         insertion)
  159.             insertion_sort $@;;
  160.         selection)
  161.             selection_sort $@;;
  162.         shell)
  163.             shell_sort $@;;
  164.         gnome)
  165.             gnome_sort $@;;
  166.         *)
  167.             echo -e "Sort visualizations\nUsage: \033[1m$0\033[0m [ \033[1;32mbubble\033[0m | \033[1;32minsertion\033[0m | \033[1;32mselection\033[0m | \033[1;32mshell\033[0m | \033[1;32mgnome\033[0m ] \033[36mARRAY\033[0m"
  168.             exit;;
  169.     esac
  170.     print_array 0 0 0 $#
  171.     echo
  172. }
  173.  
  174. main $@
Advertisement
Add Comment
Please, Sign In to add comment