数组的排序算法
1、冒泡排序
类似气泡上涌的动作,会将数据在数组中从小到大或者从大到小不断的向前移动。
基本思想∶
冒泡排序的基本思想是对比相邻的两个元素值,如果满足条件就交换元素值,把较小的元素移动到数组前面,把大的元素移动到数组后面(也就是交换两个元素的位置), 这样较小的元素就像气泡一样从底部上升到顶部。
算法思路
冒泡算法由双层循环实现,其中外部循环用于控制排序轮数,一般为要排序的数组长度减1次,因为最后一次循环只剩下一个数组元素,不需要对比,同时数组已经完成排序了。而内部循环主要用于对比数组中每个相邻元素的大小,以确定是否交换位置,对比和交换次数随排序轮数而减少。

1 #!/bin/bash 2 3 array=(63 4 24 1 3 15) 4 echo "old array: ${array[*]}" 5 length=$ {#array[*]} 6 7 #定义比较轮数,比较轮数为数组长度减1,从1开始 8 for ((i=1; i<$length; i++)) 9 do 10 #确定比较元素的位置,比较相邻两个元素,较大的数往后放,比较次数随比较轮数而减少 11 for ((j=0; j<$length-i; j++)) 12 do 13 14 #定义第一个元素的值 15 first=${array[$j]} 16 17 #定义第二个元素的值 18 k=$[$j+1] 19 second=$ {array[$k]} 20 21 #如果第一一个元素比第二个元素大就互换 22 if [ $first -gt $second ] 23 then 24 #把第一-个元素值保存到临时变量中 25 temp=$first 26 #把第二个元素值赋给第--个元素 27 array[$j]=$second 28 #把临时变量(也就是第一- 个元素原值)赋给第二个元素 29 array [$k]=$ temp 30 fi 31 done 32 done 33 #输出排序后的数组 34 echo "new_ array: ${array[*]}'


2、直接选择排序
与冒泡排序相比,直接选择排序的交换次数更少,所以速度会快些。
基本思想∶
将指定排序位置与其它数组元素分别对比, 如果满足条件就交换元素值,注意这里区别冒泡排序, 不是交换相邻元素, 而是把满足条件的元素与指定的排序位置交换 (如从最后一一个元素开始排序),这样排序好的位置逐渐扩大,最后整个数组都成为已排序好的格式。

 
 
3、反转排序
以相反的顺序把原有数组的内容重新排序。
基本思想∶
把数组最后一个元素与第一个元素替换,倒数第二个元素与第二个元素替换,以此类推,直到把所有数组元素反转替换。
#! /bin/bash array=(1020 30 40 50 60) length=$ { #array[*] } for ((i=0; i<$length/2; i++)) do temp=${array[$i] } array[$i]=${array [$length-$i-1]} array[$length-$i-1]=$temp done echo ${array[*]}

 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号