zoukankan      html  css  js  c++  java
  • 冒泡排序算法python实现

     
    1
    ''' 2 冒泡排序算法及其优化 3 冒泡排序的基本特征是只能交换相邻的元素。 4 从下边界开始,一趟扫描下来,可以把当前最大值顶到上边界; 5 如果没有发生交换操作,则表示数组是有序的。 6 ''' 7 8 9 # 算法一:基本冒泡排序 10 def BubbleSort_1(arr): 11 # 外层循环累计排序轮数,同时控制待排序数组的上边界,即A[0..i]为待排序部分 12 # 内层循环扫描A[0..i-1],比较相邻元素,并通过交换元素值的方式将最大值顶到最上方 13 for i in range(len(arr) - 1, 0, -1): 14 for j in range(i): 15 if arr[j] > arr[j + 1]: 16 arr[j], arr[j + 1] = arr[j + 1], arr[j] 17 print('第%d次排序结果:'%(8-i),end='') 18 for j in range(len(arr)): 19 print('%3d'%arr[j]) 20 21 22 # 算法二:冒泡排序改进,设置交换操作标志 23 def BubbleSort_2(arr): 24 for i in range(len(arr) - 1, 0, -1): 25 Flag = False # 先假设未做交换操作 26 for j in range(0, i): 27 if arr[j] > arr[j + 1]: 28 arr[j], arr[j + 1] = arr[j + 1], arr[j] 29 Flag = True # 设置交互操作标志 30 if not Flag: 31 break # 无交换操作,表示已完成排序,退出循环 32 33 34 # 算法二:双向冒泡(鸡尾酒排序),因为未发生交换操作的区域是有序的,故每轮扫描下来可以更新上下边界,减少扫描范围 35 def BubbleSort_3(arr): 36 low, high = 0, len(arr) - 1 37 while low < high: 38 swapPos = low # 先假设最后一次发生交换操作的位置为low 39 for j in range(low, high): # 顺序扫描A[low..high-1] 40 if arr[j] > arr[j + 1]: 41 arr[j], arr[j + 1] = arr[j + 1], arr[j] 42 swapPos = j 43 high = swapPos # 修改待排序数组的上界为最后一次发生交换操作的位置 44 for j in range(high, low, -1): # 逆序扫描A[low+1..high] 45 if arr[j] < arr[j - 1]: 46 arr[j], arr[j - 1] = arr[j - 1], arr[j] 47 swapPos = j 48 low = swapPos # 修改待排序数组的下界为最后一次发生交换操作的位置
  • 相关阅读:
    Kinect 开发 —— 硬件设备解剖
    Kinect 开发 —— 引言
    (转)OpenCV 基本知识框架
    OpenCV —— 摄像机模型与标定
    OpenCV —— 跟踪与运动
    OpenCV —— 图像局部与分割(二)
    OpenCV —— 图像局部与部分分割(一)
    OpenCV —— 轮廓
    OpenCV —— 直方图与匹配
    OpenCV —— 图像变换
  • 原文地址:https://www.cnblogs.com/liangxfng/p/11537391.html
Copyright © 2011-2022 走看看