1、算法思想
取第i元素和第i+1个元素做比较,假如第i+1个元素大于第i个元素,则交换两个元素。一直到待排序的集合是有序的为止。假设待排序的元素集合: 5 4 3 1 。
- 第一次冒泡后的序列:4 3 1 5
- 第二次冒泡的序列:3 1 4 5
- 第三次冒泡后的序列:1 3 4 5
N元素序列一共需要比较N-1轮。第i个元素需要比较N-i-1次。需要两层循环实现。
2、代码实现
2.1、Python 3.x
1 #!coding:utf-8 2 #冒泡排序 3 #输入:待排序的元素集合 4 #输出:已排序元素集合 5 def bubble_sort(lst): 6 lst_len=len(lst) 7 #控制循环次数,N个元素需要N轮比较 8 for i in range(lst_len-1): 9 #第n个元素需要比较(N-n-1)次 10 for j in range(lst_len-i-1): 11 if lst[j]>lst[j+1]: 12 #如果第j个元素大于j+1,则交换 13 lst[j],lst[j+1]=lst[j+1],lst[j] 14 return lst 15 16 if __name__ == "__main__": 17 a=bubble_sort([1,3,8,6,7,0]) 18 print(a)
运行结果:
[0, 1, 3, 6, 7, 8]
2.2、shell
1 #!/bin/bash 2 function bubbleSort() 3 { 4 declare -a lsts=$1 5 #获取数组的长度 6 len=`expr ${#lst[*]} - 1` 7 for i in `seq 0 ${len}` 8 do 9 jtmp=$((${len} - ${i} -1)) 10 for j in `seq 0 ${jtmp} ` 11 do 12 if (( ${lst[j]} > ${lst[j+1]} ));then 13 tmp=${lst[j]} 14 lst[j]=${lst[j+1]} 15 lst[j+1]=${tmp} 16 fi 17 done 18 done 19 echo "sorted list is :${lst[*]}" 20 } 21 lst=(1 3 8 6 7 0) 22 bubbleSort "${lst[*]}"
运行结果:
sorted list is :0 1 3 6 7 8