酷云的csdn 2019-12-05
? 冒泡排序作为编程中最为基础的算法,对于计算机编程初学者而言是非常值得多研究和多多尝试编写的。对于编程而言,优劣的不是语言,而是实现功能的逻辑思维和突如其来的灵感。
? 下面将给出使用shell实现冒泡排序的脚本,其中涉及的正则表达式需要细细理解。具体解释在下面的注释中有备注。
#!/bin/bash #学习shell脚本过程中实现循环输入数生成数组,然后使用冒泡排序法进行从小到大排序 #Author:lokott #Version: 3.1 #冒泡排序法的核心思想为:引入变量,两两比较,符合不动,反之互换 #脚本如下: #等待用户输入 read -p "please input num of this array:" n #下面是test语句判断输入的是否为数字,但是错误输出提示不友好,所以换为if #[[ $n =~ ^[0-9]+$ ]]&&echo "welcome"||exit 1 if [[ $n =~ ^[0-9]+$ ]] then echo "welcome" else echo "sorry you input no a number!" exit 1 fi #循环n次,等待用户输入数字,打印显示出数组内容 for i in `seq $n` do read -p "please input your num:" num if [[ $num =~ ^[0-9]+$ ]];then : else echo "sorry you input no a number!" exit 1 fi let i=i-1 array[$i]=$num done echo "原顺序的数组:" echo ${array[*]} #冒泡排序算法,核心在于下面的if语句,其实并不难理解,如果小时候玩过汉诺塔就非常好理解 #举一个简单的例子:如果你想将两杯不同果汁互换,就需要一个空杯子来作为中间人,这就类似于下面的temp变量 #该脚本实现的是从小到大排序,因此if判断的时候使用的是-gt;而且该脚本需要双重循环 #双重循环口诀:内层循环执行一遍,外层循环执行一次;结合下面的j和k,就是j=0开始执行,而一直等到k为n时才到j=2,以此类推。 #内层循环控制单次比较:即先比较第一个数与后面的所有的数进行比较,遇到比之小的与之替换,继续执行if(这里参与比较的变量就发生改变了) for ((j=0;j<$n;j++)) do for((k=j+1;k<$n;k++)) do if [[ ${array[$j]} -gt ${array[$k]} ]] then temp=${array[$j]} array[$j]=${array[$k]} array[$k]=$temp fi done done echo "进行排序之后的数组:" echo ${array[*]} # 下面是执行冒泡排序脚本的结果: # [ ~]# ./test.sh # please input num of this array:5 # welcome # please input your num:1 # please input your num:2 # please input your num:5 # please input your num:6 # please input your num:4 # 原顺序的数组: # 1 2 5 6 4 # 进行排序之后的数组: # 1 2 4 5 6
# 第三题:使用python实现冒泡排序def BubbleSort: long = len for i in range: for j in range: if list[i] < list[j]: