Python实现冒泡排序,python编写函数实现冒泡排序
BubbleSort是一种简单的排序算法。本文将详细告诉你Python实现冒泡排序算法的方法,有兴趣的朋友可以跟边肖学习一下。
00-1010 1.算法描述2。算法分析3。动画显示4。代码实现5。算法升级6。时间复杂度分析。
目录
冒泡排序是一种简单的排序算法。它反复遍历要排序的序列,一次比较两个元素,如果它们的顺序不对,就切换它们。重复遍历序列,直到不需要交换,也就是说,序列已经被排序。这种算法的名字来源于较小的元素会通过交换慢慢“浮”到序列的顶端。
1. 算法描述
1.比较相邻的元素。如果第一个比第二个大(按升序),就把两个都交换。
2.对每一对相邻的元素做同样的工作,从开始的第一对到结束的最后一对。在这一步之后,最后一个元素将是最大的数字。
3.对除最后一个元素之外的所有元素重复上述步骤。
4.每次对越来越少的元素继续重复上述步骤,直到没有任何要比较的数字对。
然后我们需要进行n-1次冒泡过程,每次对应的比较时间如下图所示:
2. 算法分析
了解了操作流程之后,我们来看看动画实现:
3. 动图展示
我们对下面的无序列表进行排序
实施代码:
导入时间
pop_list=[19,14,10,4,15,26,20,96]
打印(排序前的列表为:,pop_list)
#记录开始时间
start=time.time()
#外部循环控制轮的数量
对于范围内的I(len(pop _ list)-1):
#内循环控制比较次数
对于范围内的j(len(pop _ list)-I-1):
#如果前一个数字大于最后一个数字,则交换位置
if pop_list[j] pop_list[j 1]:
# python交换位置的独特方式
弹出列表[j],弹出列表[j 1]=弹出列表[j 1],弹出列表[j]
打印(排序列表为:,pop_list)
#记录结束时间
end=time.time()
打印(总算法时间:,结束-开始)
运行结果:
4. 代码实现
变量计数在循环中定义。如果count在第一次循环后没有变化,这意味着输入是一个有序序列。这时,我们直接返回退出循环。此时时间复杂度为O(n)
实施代码:
导入时间
定义冒泡排序(弹出列表):
对于范围(len(pop_list) - 1,0,-1):内的j
计数=0
对于(0,j):范围内的I
if pop_list[i] pop_list[i 1]:
流行列表[i],流行列表[i 1]=流行列表[i 1],流行列表[i]
计数=1
如果计数==0:
返回
pop_list=[19,14,10,4,15,26,20,96]
打印(排序前的列表为:,pop_list)
#记录开始时间
start=time.time()
冒泡排序(弹出列表)
打印(排序列表为:,pop_list)
#记录结束时间
end=time.time()
打印(总算法时间:,结束-开始)
运行结果:
5. 算法升级
最优时间复杂度:O(n)(表示遍历一次后没有可交换元素,排序结束。)
最坏时间复杂度:o(n ^ 2)
稳定性:稳定性
排序:数组中有8个数字需要排序。第一轮排序做了7次比较,第二轮排序做了6次比较,以此类推。上一轮做了一个比较。
当元素总数为N时,所需的比较总数为:(N-1) (N-2) (N-3).1=N*(N-1)/2。
算法比较了n 2/2次左右。因为只有在前一个元素大于后一个元素时才交换数据,所以交换的次数小于比较的次数。如果数据是随机的,大约有一半的数据需要交换,那么交换的次数是n ^ 2/4(但是最差的情况下,当初始数据是逆序的时候,每次比较都需要交换)。
交换和比较的运算次数与N 2成正比。由于在大O表示中忽略了常数,所以冒泡排序的时间复杂度为O (N 2)。
以上是Python实现冒泡排序算法的样例分析的详细内容。关于Python冒泡排序算法的更多信息,请关注盛行的IT软件开发工作室的其他相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。