取第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
#!coding:utf-8
#冒泡排序
#
#输入:待排序的元素集合
#输出:已排序元素集合
def bubble_sort(lst):
lst_len=len(lst)
#控制循环次数,N个元素需要N轮比较
for i in range(lst_len-1):
#第n个元素需要比较(N-n-1)次
for j in range(lst_len-i-1):
if lst[j]>lst[j+1]:
#如果第j个元素大于j+1,则交换
lst[j],lst[j+1]=lst[j+1],lst[j]
return lst
if __name__ == "__main__":
a=bubble_sort([1,5,8,9,7,19,3,0])
print(a)
运行结果:
[0, 1, 3, 5, 7, 8, 9, 19]
2.2、shell
#!/bin/bash
function bubbleSort()
{
declare -a lsts=$1
#获取数组的长度
len=`expr ${#lst[*]} - 1`
for i in `seq 0 ${len}`
do
jtmp=$((${len} - ${i} -1))
for j in `seq 0 ${jtmp} `
do
if (( ${lst[j]} > ${lst[j+1]} ));then
tmp=${lst[j]}
lst[j]=${lst[j+1]}
lst[j+1]=${tmp}
fi
done
done
echo "sorted list is :${lst[*]}"
}
lst=(1 9 19 55 3 10 6 99 0)
bubbleSort "${lst[*]}"
运行结果:
sorted list is :0 1 3 6 9 10 19 55 99
Linux公社的RSS地址:https://www.linuxidc.com/rssFeed.aspx