zoukankan      html  css  js  c++  java
  • 经典算法之冒泡排序

    1、算法思想

    取第i元素和第i+1个元素做比较,假如第i+1个元素大于第i个元素,则交换两个元素。一直到待排序的集合是有序的为止。假设待排序的元素集合: 5 4  3 1 。

    1. 第一次冒泡后的序列:4 3 1 5
    2. 第二次冒泡的序列:3  1 4 5
    3. 第三次冒泡后的序列: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
  • 相关阅读:
    Hibernate保存方式的区别
    活动图
    Apache新增站点配置
    Apache安装
    360度全方位沟通向上沟通
    时间转换
    PostgreSQL 9.2中将引入生成JSON数据功能
    Delphi 读取dbgrid中的选中一行的代码及定位函数
    彻底解决Delphi的DBGrid控件鼠标滚轮问题(转)
    DB2与PostgreSQL开发的异同
  • 原文地址:https://www.cnblogs.com/webDepOfQWS/p/10666757.html
Copyright © 2011-2022 走看看