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
  • 相关阅读:
    优先队列
    Problem W UVA 662 二十三 Fast Food
    UVA 607 二十二 Scheduling Lectures
    UVA 590 二十一 Always on the run
    UVA 442 二十 Matrix Chain Multiplication
    UVA 437 十九 The Tower of Babylon
    UVA 10254 十八 The Priest Mathematician
    UVA 10453 十七 Make Palindrome
    UVA 10163 十六 Storage Keepers
    UVA 1252 十五 Twenty Questions
  • 原文地址:https://www.cnblogs.com/webDepOfQWS/p/10666757.html
Copyright © 2011-2022 走看看