冒泡排序算法-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  # 修改待排序数组的下界为最后一次发生交换操作的位置

原文地址:https://www.cnblogs.com/liangxfng/p/11537391.html

时间: 2024-10-13 14:58:18

冒泡排序算法-python实现的相关文章

冒泡排序算法的JavaScript实现

作为经典的排序算法之一,冒泡排序在JavaScript中也有多种实现方式. 在一些最常见的实现中会声明临时变量,在另一些不必声明临时变量的实现中则可能只支持数值数组或字符串数组(二者之一). 下面介绍两种[无须声明临时变量],[对数值数组和字符串数组都适用]的实现方式. ES5版: var arr = [5, 25, 2, 53, 22, 10]; function bubbleSort(arr) { for (var j = 1, len = arr.length; j < len; j++)

冒泡排序算法

冒泡排序(Bubble Sort)是一种简单的排序算法.它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成.这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端. 本文地址:http://www.cnblogs.com/archimedes/p/bubble-sort-algorithm.html,转载请注明源地址. 冒泡排序对n个项目需要O(n2)的比较次数,且可以原地排序.尽

【机器学习算法-python实现】采样算法的简单实现

1.背景 采样算法是机器学习中比较常用,也比较容易实现的(出去分层采样).常用的采样算法有以下几种(来自百度知道): 一.单纯随机抽样(simple random sampling) 将调查总体全部观察单位编号,再用抽签法或随机数字表随机抽取部分观察单位组成样本. 优点:操作简单,均数.率及相应的标准误计算简单. 缺点:总体较大时,难以一一编号. 二.系统抽样(systematic sampling) 又称机械抽样.等距抽样,即先将总体的观察单位按某一顺序号分成n个部分,再从第一部分随机抽取第k

【机器学习算法-python实现】矩阵去噪以及归一化

1.背景 项目需要,打算用python实现矩阵的去噪和归一化.用numpy这些数学库没有找到很理想的函数,所以一怒之下自己用标准库写了一个去噪和归一化的算法,效率有点低,不过还能用,大家如果有需要可以拿去. (1)去噪算法:根据概率论的知识,如果一组数据服从正态分布,我们设均值是n,方差是v,那么对于每个离散数值有百分之九十二以上的概率会在(n-3*v,n+3*v)的区间内.所以这里的去噪功能主要是实现如果超出了区间就将这个值标记为区间所能容忍最大值. (2)归一化:找到输入队列最大值max,最

【机器学习算法-python实现】协同过滤(cf)的三种方法实现

(转载请注明出处:http://blog.csdn.net/buptgshengod) 1.背景 协同过滤(collaborative filtering)是推荐系统常用的一种方法.cf的主要思想就是找出物品相似度高的归为一类进行推荐.cf又分为icf和ucf.icf指的是item collaborative filtering,是将商品进行分析推荐.同理ucf的u指的是user,他是找出知趣相似的人,进行推荐.通常来讲icf的准确率可能会高一些,通过这次参加天猫大数据比赛,我觉得只有在数据量非

冒泡排序算法可视化

在百度前端技术学院的任务列表那里看到了有一个任务是要求用javascript实现可视化的排序算法,感觉很有趣,就稍微研究了一下,本来是想实现冒泡排序算法和快速排序算法的可视化的,可是快速排序在要如何实现可视化这一步上感觉有一点难度,于是就暂时放弃了. 冒泡排序原理 冒泡排序我们应该都不陌生吧?很简单的两个for循环就可以实现了,其基本原理是:在一开始的时候,比较第一第二个数,如果如果第一个数比第二个数大的话则交换二者位置,在比较第二个和第三个数,同样的如果第二个数比第三个数大的话,则交换二者位置

冒泡排序算法。

   冒泡排序算法 题目: 给定7个int类型的数,用冒泡排序实现出来.  code:   public class Maopaopaixu {    public static  void fun()    {        int arr[] ={9,8,6,1,5,3,2};        System.out.println("数组排序前的顺序为:");        for(int i=0;i<arr.length;i++)        {            Sy

数据结构——排序——冒泡排序算法

冒泡排序(Bubble Sort)是一种简单的排序算法.它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成.这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端. 冒泡排序对n个项目需要O(n2)的比较次数,且可以原地排序.尽管这个算法是最简单了解和实作的排序算法之一,但它对于少数元素之外的数列排序是很没有效率的. 冒泡排序是与插入排序拥有相等的执行时间,但是两种法在需要的交换次

javascript学习5-练习之2冒泡排序算法

复习冒泡排序算法,同时自己也写了一个排序算法. 实现效果: 1.自己的算法思想: 数组中数据取第一个为默认最小,依次和后面每个数据比较,只要有比其小的就交换直至找出最小的. 然后将第二个数据与其后面所有数据比较,找出最小,依次重复 2.冒泡排序算法思想: 数据从最低端到最高端为 a[n] ......a[0] 第一轮:将a[0]与a[1]比较,高者上,然后依次比较a[1]和a[2]....a[n-1]和a[n]每次将大的往上冒 第二轮: 将a[0]与a[1]比较,高者上,然后依次比较a[1]和a